python-继承,, 1 class A
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-继承
相关内容
- 使用python获取股票指定日期交易代码数据,python股票
- python之路-CSS的学习,python之路-css,CSS基本概念CSS
- python-字典练习,python-字典,备注:此次练习使用3
- python *与**,python,python中,在形
- python2与python3的print及字符串格式化小结,python2python3
- 解决vscode python print 输出窗口中文乱码的问题,vscodep
- python中print()函数的“,”与java中System.out.print()函数中
- 对python中return和print的一些理解,pythonreturnprint
- 关于Python 3中print函数的换行详解,pythonprint
- 浅谈pyhton学习中出现的各种问题(新手必看),pyhton新手
评论关闭