首页 > 其他 > 详细

多继承

时间:2020-11-18 09:45:09      阅读:32      评论:0      收藏:0      [点我收藏+]

python类分为两种:
1、经典类:不继承object类,深度优先原则
2、新式类:继承object类,mro(C3)算法

python2x:
python2.2之前,都是经典类。python2.2之后,经典类与新式类共存
python3x:
都是新式类

python3x默认继承object类

class A():  # 等同于 class A(object):
    pass


class B(A):
    pass


class C(B):
    pass

python2x默认不继承object类

class A:  # 经典类
    pass


class B(object):  # 新式类
    pass

经典类:深度优先。从左至右,深度优先

class ShenXian:
    def fly(self):
        print("神仙都会飞")

    def walk(self):
        print("神仙都会走路")


class Monkey:
    def climb(self):
        print("猴子都会爬山")

    def walk(self):
        print("猴子都会走路")


class SunWuKong(ShenXian, Monkey):
    pass


sun = SunWuKong()
sun.fly()
sun.climb()
sun.walk()
class O:
    name = "yulin"


class D(O):
    pass


class E(O):
    name = "cola"


class F(O):
    name = "50"


class B(D, E):
    pass


class C(E, F):
    pass


class A(B, C):
    pass


obj = A()
print(obj.name)

# python3 mro()看继承顺序

print(A.mro())

mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )
mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C])

"""
如计算merge( [E,O], [C,E,F,O], [C] )
有三个列表 : ① ② ③

1 merge不为空,取出第一个列表列表①的表头E,进行判断
各个列表的表尾分别是[O], [E,F,O],E在这些表尾的集合中,因而跳过当前当前列表
2 取出列表②的表头C,进行判断
C不在各个列表的集合中,因而将C拿出到merge外,并从所有表头删除
merge( [E,O], [C,E,F,O], [C]) = [C] + merge( [E,O], [E,F,O] )
3 进行下一次新的merge操作 ......
"""

"""
mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C])

mro(B) = mro(B(D,E))
mro(B(D,E)) = [B] + merge(mro(D),mro(E),[D,E])
mro(B(D,E)) = [B] + merge([D,O],[E,O],[D,E])
mro(B(D,E)) = [B,D] + merge([O],[E,O],[E])
mro(B(D,E)) = [B,D,E] + merge([O],[O])
mro(B(D,E)) = [B,D,E,O]

mro(A(B,C)) = [A] + merge([B,D,E,O],mro(C),[B,C])

mro(C) = mro(C(E,F))
mro(C(E,F)) = [C] + merge(mro(E),mro(F),[E,F])
mro(C(E,F)) = [C] + merge([E,O],[F,O],[E,F])
mro(C(E,F)) = [C,E] + merge([O],[F,O],[F])
mro(C(E,F)) = [C,E,F] + merge([O],[O])
mro(C(E,F)) = [C,E,F,O]

mro(A(B,C)) = [A] + merge([B,D,E,O],[C,E,F,O],[B,C])
mro(A(B,C)) = [A,B] + merge([D,E,O],[C,E,F,O],[C])
mro(A(B,C)) = [A,B,D] + merge([E,O],[C,E,F,O],[C])
mro(A(B,C)) = [A,B,D,C] + merge([E,O],[E,F,O])
mro(A(B,C)) = [A,B,D,C,E] + merge([O],[F,O])
mro(A(B,C)) = [A,B,D,C,E,F] + merge([O],[O])
mro(A(B,C)) = [A,B,D,C,E,F,O]
"""

多继承

原文:https://www.cnblogs.com/Ylinn/p/13997768.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!