python-继承,, 1 class A


 1 class A: 2     pass 3 class B(A): 4     pass 5 class C(A): 6     pass 7 class D(B, C): 8     pass 9 class E:10     pass11 class F(D, E):12     pass13 class G(F, D):14     pass15 class I:16     pass17 class J(B, C):18     pass19 class K(A):20     pass21 class H(I, J, K):22     pass23 class Foo(H, G):24     pass
class A:    passclass B(A):    passclass C(A):    passclass D(B, C):    passclass E(C, A):    passclass F(D, E):    passclass M:    passclass N(M):    passclass P(E, A):    passclass X:    passclass Q(P,N,X):    passclass G(Q, F):    passclass H(G, F):    pass‘‘‘L(H) = H + L(G) + L(F) + GF # HGQPFDBECANMX L(G) = G + L(Q) + L(F) + QF # GQPFDBECANMX L(Q) = Q + L(P) + L(N) + X + PNX # QPECANMXL(P) = P + L(E) + A + EA  # PECAL(E) = E + L(C) + A + CA   # ECAL(C) = C + A + A   # CAL(N) = N + M # NML(F) = F + L(D) + L(E) + DE # FDBECAL(D) = D + L(B) + L(C) + BC # DBCA‘‘‘‘‘‘    求H的MRO    设求MRO的算法是L    L(H) = H + L(G) + L(F) + GF    L(G) = G + L(E) + E    L(E) = E + L(C) + L(A) + CA    L(C) = C + L(A) + A    L(A) = A    L(F) = F + L(D) + L(E) + DE    L(D) = D + L(B) + L(C) + BC    L(B) = B + L(A) + A    # 加法:merge(), 拿第一项的第一位和 后面每项的除了第一位比较. 如果没有出现, 则该位元素算出        如果出现了. 此时开始下一项的第一位继续和后面每一项的除了第一位比较:                用头和后面身体比较                L(H) = H + L(G) + L(F) + GF # ECA + DBECA  = HGFDBECAO    L(G) = G + L(E) + E # GECA    L(E) = E + L(C) + L(A) + CA # ECA    L(C) = C + L(A) + A  # CA    L(A) = A    L(F) = F + L(D) + L(E) + DE # FDBECA    L(D) = D + L(B) + L(C) + BC # DBCA    L(B) = B + A + A   # BA‘‘‘print(H.__mro__)
# class Base1:#     def chi(self):#         print("我是可怜的Base1")## class Base2:#     def chi(self):#         print("我是可怜的Base2")## class Base3:#     def chi(self):#         print("我是可怜的Base3")## class Bar(Base1, Base2, Base3):#     def chi(self):#         print("我是Bar里面的吃1")#         # super(类名, self) 从某个类开始找下一个MRO#         super(Base2, self).chi() # 此时调用的super. 在Bar调用 -> super表示找MRO里的下一个#         # super().chi() # super(Bar, self).chi()#         print("我是Bar里面的吃2")## b = Bar() # Bar, Base1, Base2, Base3, object# b.chi()# print(Bar.__mro__)# class Base1:#     def chi(self):#         super().chi() # super找的是MRO的下一个.#         print("我是可怜的Base1")## class Base2:#     def chi(self):#         super().chi()#         print("我是可怜的Base2")## class Base3:#     def chi(self):#         print("我是可怜的Base3")## class Bar(Base1, Base2, Base3):#     def chi(self):#         print("我是Bar里面的吃1")#         # super(类名, self) 从某个类开始找下一个MRO#         super(Bar, self).chi() # 此时调用的super. 在Bar调用 -> super表示找MRO里的下一个#         # super().chi() # super(Bar, self).chi()#         print("我是Bar里面的吃2")## b = Bar() # 报错 Base1 object# b.chi() # 报错# # 坑# MRO + super ?试题class Init(object):    def __init__(self, v): # 2        print("init")        self.val = vclass Add2(Init):    def __init__(self, val): # 2        print("Add2")        super(Add2, self).__init__(val) # Mult        print(self.val)        self.val += 2class Mult(Init):    def __init__(self, val):        print("Mult")        super(Mult, self).__init__(val) # Haha        self.val *= 5class HaHa(Init):   def __init__(self, val):        print("哈哈")        super(HaHa, self).__init__(val) # Init        self.val /= 5class Pro(Add2,Mult,HaHa): #    passclass Incr(Pro): # incr->pro->add2->Mult->HaHa->init    def __init__(self, val): # 5        super(Incr, self).__init__(val) # Add2        self.val += 1‘‘‘MRO: method resolution orderIncr,Pro,Add2,Mult,HaHa,Init,Objectsuper()a = Incr()a.chi()‘‘‘# # print(Incr.__mro__)# # Incr Pro Add2 Mult HaHa Init# p = Incr(5) # p.val = 8.0# # Add2# # Mult# # 哈哈# # init# # 5.0# # 8.0# print(p.val)#c = Add2(2) # Add2, Init, Object c.val = 2# Add2# init# 2# 4print(c.val) # 4#

python-继承

评论关闭