为了账号安全,请及时绑定邮箱和手机立即绑定

4.2 继承与多态

标签:
Python

继承和多态是面向对象编程的两个重要概念。继承允许创建一个新类,该类继承自现有类的属性和方法,从而实现代码重用和模块化。多态是指同一操作作用于不同的对象,可以产生不同的结果,它使得我们可以使用统一的接口处理不同类型的对象。

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 类,它具有两个属性 namespecies,以及一个 speak() 方法。我们还定义了两个继承自 Animal 类的子类:DogCat。这两个子类分别覆盖了 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)

在子类中,可以覆盖(重写)基类中的方法,以实现特定于子类的功能。例如,在上面的示例中,DogCat 子类分别重写了 Animal 类的 speak() 方法。

4.2.4 调用基类方法

在子类中,可以使用 super() 函数调用基类的方法。例如,当创建 DogCat 类的实例时,我们需要调用 Animal 类的 __init__() 方法来初始化 namespecies 属性。在这种情况下,我们可以使用 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):SwimMixinFlyMixin。混入类是一种常用的多重继承模式,它们包含特定的行为,可以在其他类中重用。我们创建了一个 Dolphin 类,同时从 Animal 类和 SwimMixin 类继承,还创建了一个 Bat 类,同时从 Animal 类和 FlyMixin 类继承。

当我们创建 DolphinBat 类的实例并调用它们的 swim()fly() 方法时,输出结果为:

Flipper is swimming.
Dracula is flying.

至此,我们已经详细介绍了继承与多态的基本概念、方法重写、调用基类方法以及多重继承等知识点,并通过实例代码展示了它们的应用。希望这些内容能帮助你更好地理解 Python 面向对象编程中的继承与多态。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消