欢迎来到得易搜分类信息网!
北京
切换分站
免费发布信息
    拉勾教育经典类与新式类钻石继承(菱形继承)多继承之“广度优先
    分享  | 2021-09-17 04:09:27发布 次浏览 信息编号:55279
  • 置顶
  • 收藏  |
  • 删除  |
  • 修改  |
  • 举报  |
拉勾教育经典类与新式类钻石继承(菱形继承)多继承之“广度优先
  • 拉勾教育经典类与新式类钻石继承(菱形继承)多继承之“广度优先
  • 学费:9元
  • 地址:海淀 中关村
    • Q Q:327746115QQ在线交谈
    • 联系人:小勾老师
    • 电话:1336682**** 点击查看完整号码
      • 得易搜分类信息网提醒您:让你提前汇款,或者价格明显低于市价,均有骗子嫌疑,不要轻易相信。
  • 信息详情
一、经典类与新式类(了解)
  新式类:
    1)凡是继承object的类或子孙类都是新式类
    2)在python3中所有的类都是新式类(默认继承object)
 
  经典类:
    1)必须在python2中才会有经典类与新式类之分
    2)在python2中,凡是没有继承object的类,都是经典类
 
# 新式类:
class User(object):
    pass

class Sub(User):
    pass


# 在python3中所有的类都是新式类(默认继承object)
class Bar:
    pass

print(Bar.__bases__)    # (<class 'object'>,)
 
 
二、新式类查找属性和方法的顺序(了解)
  在python3中提供了一个新式类查找属性和方法的顺序的内置方法:
    mro():会把当前类的继承关系列出来
    调用mro返回的是一个继承序列:
      super()的继承序列严格遵循mro继承序列
 
  新式类查找属性和方法的顺序:
    1)先从子类中查找
    2)若子类中没有,从父类中查找,如果继承多个父类的情况下:从左到右
    3)若父类中也没有,从object中查找
    4)若object中也没有则报错
class Father1:
    x = 10

class Father2:
    x = 20

class Father3:
    x = 30

# 多继承的情况下:从左到右
class Sub(Father1, Father2, Father3):
    # 注意:__int__  不是  __init__
    def __init__(self):
        print(super().x)


obj = Sub()
print(Sub.mro())
# 子类和父类中都没有这个方法,但是object中有,所以从object中找到.__dir__
print(Sub.__dir__)
  执行结果:
10
[<class '__main__.Sub'>, <class '__main__.Father1'>, <class '__main__.Father2'>, <class '__main__.Father3'>, <class 'object'>]
<method '__dir__' of 'object' objects>
 
 
三、钻石继承(菱形继承)
  继承多个父类的情况下会造成"钻石继承"
 
  例:多继承
class A(object):
    def test(self):
        print("from A")

class B(A):
    def test(self):
        print("from B")

class C(A):
    def test(self):
        print("from C")

class D(B):
    def test(self):
        print("from D")

class E(C):
    def test(self):
        print("from E")

class F(D, E):
    def test(self):
        print("from F")


print(F.mro())
  执行结果:
[<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
  继承结果图:
 
   因为整体形状像钻石或者像菱形,所以叫做钻石继承,也叫做菱形继承。(类似的形状也可以,前提是多继承)
 
 
四、类继承之广度优先、深度优先
  python 支持多继承,但对与经典类和新式类来说,多继承查找的顺序是不一样的。
  内置方法mro()的查找顺序:
    - 新式类
      从左到右,广度优先
 
    - 经典类
      从左到右,深度优先
 
  两种概念图:
 
 
  新式类广度优先演示:
class A(object):
    def test(self):
        print("from A")

class B(A):
    # def test(self):
        # print("from B")
    pass

class C(A):
    def test(self):
        print("from C")

class D(B):
    # def test(self):
    #     print("from D")
    pass

class E(C):
    def test(self):
        print("from E")

class F(D, E):
    # def test(self):
    #     print("from F")
    pass


obj = F()
print(obj.test())
  执行结果:
from E
联系我时,请说是在得易搜分类信息网看到的,谢谢!

拉勾教育经典类与新式类钻石继承(菱形继承)多继承之“广度优先

  • 您可能感兴趣
查看更多
    小贴士:本页信息由用户及第三方发布,真实性、合法性由发布人负责,请仔细甄别。
  • 用户级别:新手上路
  • 信用等级:信用值:0

    未上传身份证认证 未上传身份证认证

    未上传营业执照认证 未上传营业执照认证