Python-面向对象编程-继承

786 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

1. 方法的重写

继承的概念:

  • 子类拥有父类的所有方法和属性
  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发 应用场景:当父类的方法实现不能满足子类需求时,可以对方法进行重写-重新编写(override)。

重写父类方法有两种情况:

  1. 覆盖父类的方法
  2. 对父类方法进行扩展

覆盖父类的方法:

  • 如果在开发中,父类的方法实现和子类的方法实现,完全不同
  • 就可以使用覆盖的方式,在子类中重新编写父类的方法实现

具体的实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现。重写之后,在运行时,只会调用子类中重写的方法,而不会调用父类封装的方法。

2. 示例演示

在XiaoTianQuan类中创建新的bark方法,再使用XiaoTianQuan创建对象,调用bark方法。看看在XiaoTianQuan的父类Dog中的bark方法还会不会实现呢?

代码演示如下所示:

class Animal:
    def eat(self):
        print("吃...")

    def drink(self):
        print("喝...")

    def run(self):
        print("跑---")

    def sleep(self):
        print("睡---")


class Dog(Animal):
    def bark(self):
        print("汪汪叫")


class XiaoTianQuan(Dog):
    def fly(self):
        print("我会飞")

    def bark(self):
        print("叫得跟神一样")


xtq = XiaoTianQuan()
# 如果子类中重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()

运行结果如下图所示:由运行结果可以看出,在运行时,子类对象只会调用子类中重写的方法,而不再会调用原本在父类中封装的方法。

image.png

3. 对父类方法进行扩展

如果在开发中,子类的方法实现中包含父类的方法实现

  • 父类原本封装的方法实现是子类方法的一部分 就可以使用扩展的方式
  1. 在子类中重写父类的方法
  2. 在需要的位置使用super().父类方法来调用父类方法的执行
  3. 代码其他的位置针对子类的需求,编写子类特有的代码实现

4. 代码示例

代码示例如下所示:在子类中重写父类的方法,在需要的位置使用super().调用原本在父类中封装的方法。针对子类特有的需求编写特有的代码。

class Animal:
    def eat(self):
        print("吃...")

    def drink(self):
        print("喝...")

    def run(self):
        print("跑---")

    def sleep(self):
        print("睡---")


class Dog(Animal):
    def bark(self):
        print("汪汪叫")


class XiaoTianQuan(Dog):
    def bark(self):
        # 1. 针对子类特有的需求,编写代码
        print("叫得跟神一样")
        # 2. 使用super().调用原本在父类中封装的方法
        super().bark()
        # 3. 增加其他子类的代码
        print("$$!#!$!!!$$!$!&&&111")


xtq = XiaoTianQuan()
xtq.bark()

程序运行结果如下图所示:

image.png