继承和多态是面向对象编程的两个重要概念。继承允许创建一个新类,该类继承自现有类的属性和方法,从而实现代码重用和模块化。多态是指同一操作作用于不同的对象,可以产生不同的结果,它使得我们可以使用统一的接口处理不同类型的对象。
4.2.1 继承
在 Python 中,要创建一个继承自现有类的新类,只需在类定义时将现有类名放在括号里。例如:
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species
def speak(self):
print(f"{self.name}, a {self.species}, is speaking.")
class Dog(Animal):
def __init__(self, name):
super().__init__(name, "dog")
def speak(self):
print(f"{self.name}, a {self.species}, says Woof!")
class Cat(Animal):
def __init__(self, name):
super().__init__(name, "cat")
def speak(self):
print(f"{self.name}, a {self.species}, says Meow!")
在这个示例中,我们定义了一个 Animal
类,它具有两个属性 name
和 species
,以及一个 speak()
方法。我们还定义了两个继承自 Animal
类的子类:Dog
和 Cat
。这两个子类分别覆盖了 speak()
方法,以实现特定于它们的行为。
4.2.2 多态
多态允许我们使用相同的接口处理不同类型的对象。以下是一个多态的示例:
def let_animals_speak(animals):
for animal in animals:
animal.speak()
dog1 = Dog("Buddy")
cat1 = Cat("Whiskers")
let_animals_speak([dog1, cat1])
在这个示例中,我们定义了一个名为 let_animals_speak()
的函数,它接收一个动物列表作为参数,并调用列表中每个动物的 speak()
方法。我们创建了一个 Dog
类的实例 dog1
和一个 Cat
类的实例 cat1
,并将它们传递给 let_animals_speak()
函数。尽管它们是不同类型的对象,但多态允许我们使用相同的接口处理它们。
输出结果为:
Buddy, a dog, says Woof!
Whiskers, a cat, says Meow!
4.2.3 方法重写(Override)
在子类中,可以覆盖(重写)基类中的方法,以实现特定于子类的功能。例如,在上面的示例中,Dog
和 Cat
子类分别重写了 Animal
类的 speak()
方法。
4.2.4 调用基类方法
在子类中,可以使用 super()
函数调用基类的方法。例如,当创建 Dog
或 Cat
类的实例时,我们需要调用 Animal
类的 __init__()
方法来初始化 name
和 species
属性。在这种情况下,我们可以使用 super().__init__(name, species)
调用基类的构造方法,如下:
class Dog(Animal):
def __init__(self, name):
super().__init__(name, "dog")
class Cat(Animal):
def __init__(self, name):
super().__init__(name, "cat")
4.2.5 多重继承
Python 支持多重继承,这意味着一个类可以从多个基类中继承属性和方法。要创建一个继承自多个基类的新类,只需在类定义时将这些基类名放在括号里,并用逗号分隔。例如:
class SwimMixin:
def swim(self):
print(f"{self.name} is swimming.")
class FlyMixin:
def fly(self):
print(f"{self.name} is flying.")
class Dolphin(Animal, SwimMixin):
def __init__(self, name):
super().__init__(name, "dolphin")
class Bat(Animal, FlyMixin):
def __init__(self, name):
super().__init__(name, "bat")
dolphin1 = Dolphin("Flipper")
bat1 = Bat("Dracula")
dolphin1.swim()
bat1.fly()
在这个示例中,我们定义了两个混入类(Mixin):SwimMixin
和 FlyMixin
。混入类是一种常用的多重继承模式,它们包含特定的行为,可以在其他类中重用。我们创建了一个 Dolphin
类,同时从 Animal
类和 SwimMixin
类继承,还创建了一个 Bat
类,同时从 Animal
类和 FlyMixin
类继承。
当我们创建 Dolphin
和 Bat
类的实例并调用它们的 swim()
和 fly()
方法时,输出结果为:
Flipper is swimming.
Dracula is flying.
至此,我们已经详细介绍了继承与多态的基本概念、方法重写、调用基类方法以及多重继承等知识点,并通过实例代码展示了它们的应用。希望这些内容能帮助你更好地理解 Python 面向对象编程中的继承与多态。