类的继承(菱形问题)

所有的类都是object的子类

继承:

class B(A):

class Phone:
    def call(self):
        print("正在打电话")
    def send_msg(self):
        print("发送短信")
class Smartphone(Phone):
    '''继承了Phone类(Phone是Smartphone的父类),
    可以使用Phone的所有方法和属性'''
    def caputure_video(self):
        print("正在视频")

如果父类和子类有一个方法(属性)重名了,那么子类会使用自己的方法和属性(即重写)

 

多重继承:class C(A,B...),子类继承多个父类

如果一个方法多个父类都有,子类调用时按继承的父类先后顺序查找(使用print(D.__mro__)查询执行顺序)

 

菱形问题(面试经常被问到):

 

BC都继承了A类,然后d继承了A类

 

 

执行的是C的(广度优先)

 

当C不再继承A的时候

 

执行的是A(深度优先)

 

如果往上衍生,还继承了其他类,此时我们不知道执行顺序,怎么办?

使用print(D.__mro__)查询执行顺序

 

 

超继承:

如果想继承父类的方法,又想加点东西,可以用到super方法

class B(A):
    def call(self):
        self.age='18'
        super().call()#这一句就是调用父类的call方法,而不是自己的

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值