python_进阶_12


继承

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

单继承

class Animal:
    def eat(self):
        print("吃")
    def drink(self):
        print("喝")
    def run(self):
        print("跑")
    def sleep(self):
        print("睡")

# class 子类(父类):
class Dog(Animal):
    def bark(self):
        print("汪汪叫")

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

# 创建一个对象 - 狗对象
wangcai = Dog()
# 子类拥有父类的所有属性
wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.sleep()

# 创建一个啸天犬的对象
xtq = XiaoTianQuan()
xtq.fly()
xtq.bark()
xtq.eat()
  • 专业术语

    Dog类是Animal类的子类, Animal类是Dog类的父类, Dog类从Animal继承

    Dog类是Animal类的派生类, Animal类是Dog类的基类, Dog类从Animal派生

方法的重写 – 覆盖父类方法

  • 如果在开发中,父类的方法实现和子类的方法实现完全不同

  • 就可以使用覆盖的方式, 在子类中重新编写父类的方法实现

    具体的实现方式,就相当于在子类中定义一个和父类同名的方法并且实现

class Animal:
    def eat(self):
        print("吃")
    def drink(self):
        print("喝")
    def run(self):
        print("跑")
    def sleep(self):
        print("睡")

# class 子类(父类):
class Dog(Animal):
    def bark(self):
        print("汪汪叫")

class XiaoTianQuan(Dog):
    def fly(self):
        print("我会飞")
    def bark(self):
        print("叫得跟神一样...")

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

扩展父类方法

class Animal:
    def eat(self):
        print("吃")
    def drink(self):
        print("喝")
    def run(self):
        print("跑")
    def sleep(self):
        print("睡")

# class 子类(父类):
class Dog(Animal):
    def bark(self):
        print("汪汪叫")

class XiaoTianQuan(Dog):
    def fly(self):
        print("我会飞")
    def bark(self):
        # 1. 针对子类特有的需求,编写代码
        print("叫得跟神一样...")

        # 2. 使用 super(). 调用原本在父类中封装的方法
        super().bark()
        # 在更早的python版本中,使用 父类名.方法(self)
        # Dog.bark(self)  # 在这里如果使用当前子类名调用方法 XiaoTianQuan.bark(self),会形成递归调用,出现死循环

        # 3. 增加其它子类的代码
        print("#$$%%%^^^^")

xtq = XiaoTianQuan()
# 如果子类中,重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()
  • 子类对象 不能 在自己的方法内部,直接访问父类的私有属性或者私有方法

  • 子类对象可以通过父类的公有方法间接访问到私有属性或者私有方法

    也就是父类的公有方法中包含私有属性和私有方法,子类通过调用父类公有方法也能够调用到包含在公有方法下的私有属性和私有方法


文章作者: 张忠楠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张忠楠 !
评论
 上一篇
python_进阶_13 python_进阶_13
多态 ==不同的子类对象调用相同的父类方法, 产生不同的执行结果== 以继承和重写父类方法为前提 class Dog(object): """object是所有类的基类""" def __init__(self,n
2020-04-28
下一篇 
python_进阶_11 python_进阶_11
私有属性和私有方法 在实际开发中,对象的某些属性或者方法可能只希望在对象的内部被使用,而不希望在外部被访问到 在定义属性或者方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性和私有方法 class Women:
2020-04-27
  目录