Python-面向对象编程-继承

155 阅读2分钟

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

1. 面向对象

面向对象三大特性

  1. 封装:根据职责将属性和方法封装到一个抽象的类中
  2. 继承:实现代码的重用,相同的代码不需要重复的编写
  3. 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

2. 继承

继承的概念:子类拥有父类的所有方法和属性

  • 单继承
  • 多继承

3. 示例详解

继承的语法:

class 类名(父类名):
pass
  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
  • 子类中应该根据职责,封装子类特有的属性和方法 代码示例如下所示:子类拥有父类的所有属性和方法,子类就不需要再次针对父类的方法进行额外开发。
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("汪汪叫")


# 创建一个对象-狗对象
wangcai = Dog()
wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.sleep()
wangcai.bark()

程序运行结果如下图所示:代码中,实现了让狗类继承动物类的方法与属性。

以术语的形式对本案例内容进行描述:

  • Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal类继承
  • Dog类是Animal类的派生类,Animal类是Dog类的基类,Dog类从Animal类派生

image.png

4. 继承的传递性

继承的传递性概括如下:

  • C类从B类继承,B类又从A类继承
  • 那么C类就具有B类和A类的所有属性和方法 换句话说,继承的传递性也就是子类拥有父类以及父类的父类中封装的所有属性和方法

代码示例如下所示:定义一个新的类XiaoTianQuan,使其继承Dog类以及Animal类。

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("我会飞")


# 创建一个对象-xtq对象

xtq = XiaoTianQuan()
xtq.sleep()
xtq.fly()

程序运行结果如下图所示:从图中可以看出,XiaoTianQuan类创建的对象xtq成功调用了sleep和fly方法。这是因为:XiaoTianQuan类继承了父类Dog的所有属性和方法,同样也继承了父类的父类(爷爷)Animal的所有属性和方法。

image.png