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