面向对象特性之继承(一)继承的特性、类的结构、代码理解继承

继承是什么

如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。

继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码

在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。

另外,为子类别追加新的属性和方法也是常见的做法。

继承的特性

在这里插入图片描述

类的结构

在这里插入图片描述在这里插入图片描述

代码理解

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

class Cat(Animal):
    # def eat(self):
    #     print('吃!!!')
    # def drink(self):
    #     print('喝!!!')
    # def run(self):
    #     print('跑!!!')
    # def sleep(self):
    #     print('睡!!!')

    def call(self):
        print('喵喵!!')

class Hellokitty(Cat):
    def speak(self):
        print('我可以说话')
    def call(self):
        # 调用原本在父类中封装的方法
        super().call()--->保留父类的方法,进行改写。不加此句,子类中与父类同名的方法会覆盖父类的方法。
        # Cat.call(self) python2.x
        # 针对子类特有的需求 编写代码
        print('#%@@#$#@%')

class Dog(Animal):
    pass


cat = Hellokitty()
cat.eat()
cat.drink()
cat.run()
cat.call()

dog = Dog()
dog.run()
dog.eat()

Animal类是父类,它的方法可以被子类Cat调用,子类Cat也可以有自己的私有方法。
HelloKitty类继承自Cat类,它的父类是Cat继承。继承具有传递性。

理解方法的覆盖

class A:
    def test(self):
        print('A----test方法')
    def demo(self):
        print('A----demo方法')

class B:
    def test(self):
        print('B----test方法')
    def demo(self):
        print('B----demo方法')


class C(B,A): #B会覆盖A
#若A写在前面 A会覆盖B
    pass
c = C()
c.test()
c.demo()

运行结果:
在这里插入图片描述

super关键字

class Bird(object):
    def __init__(self):
        self.hungry = True
    def eat(self):
        if self.hungry:
            print('$$@#%@%')
            self.hungry = False
        else:
            print('No thanks')

class SongBird(Bird):
    def __init__(self):
       # super().__init__()
        self.sound = 'aaaaaa'
    def sing(self):
        print(self.sound)

bird = SongBird()
bird.eat()
bird.sing()

上述代码执行时会报错。
在这里插入图片描述原因:
子类和父类有同名函数__init__,子类会覆盖父类的方法。
因此子类中没有hungry属性。
当在子类方法名前加上super().__init__(),就不会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值