继承和多态是面向对象编程的两个重要概念。继承允许创建一个新类,该类继承自现有类的属性和方法,从而实现代码重用和模块化。多态是指同一操作作用于不同的对象,可以产生不同的结果,它使得我们可以使用统一的接口处理不同类型的对象。
在 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()
方法,以实现特定于它们的行为。
多态允许我们使用相同的接口处理不同类型的对象。以下是一个多态的示例:
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!
在子类中,可以覆盖(重写)基类中的方法,以实现特定于子类的功能。例如,在上面的示例中,Dog
和 Cat
子类分别重写了 Animal
类的 speak()
方法。
在子类中,可以使用 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")
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 面向对象编程中的继承与多态。