python2中經典類使用的是深度優先,新式類使用的是廣度優先
python3經典類與新式類都是廣度優先。
一圖以蔽之:
如圖,b 繼承 a, c 繼承 a, d 繼承 b 和 c。
上**:
# -*- coding:utf-8 —*-
class p1:
pass
def foo(self):
print('p1-foo')
class p2:
def foo(self):
print('p2-foo')
def bar(self):
print('p2-bar')
class c1(p1, p2):
pass
class c2(p1, p2):
def foo(self):
print('c2-foo')
def bar(self):
print('c2-bar')
class d(c1, c2):
pass
d = d()
d.foo() # 輸出 p1-foo
d.bar() # 輸出 p2-bar
Python 多繼承方式及順序
在看本篇之前,需要先了解兩個概念 深度優先 廣度優先。深度優先和廣度優先是兩種不同的演算法策略,兩者有什麼區別呢?我直接上 釋吧。如圖,b 繼承 a,c 繼承 a,d 繼承 b 和 c。tips py2 經典類是按深度優先來繼承的,新式類是按廣度優先來繼承的。py3 經典類和新式類都是統一按廣度優先...
多繼承及MRO順序
super init 相對於類名.init,在單繼承上用法基本 差 但在多繼承上有區別,super方法能保證每個父類的方法只會執行一次,而使用類名的方法會導致方法被執行多次 多繼承時,使用super方法,對父類的傳引數,應該是由於python中 super的演算法導致的原因,必須把引數全部傳遞,否則...
Python 多繼承中MRO順序
在python3 裡面,使用super當有多繼承的情況出現的時候,有時候會出現呼叫父類init呼叫不到,因為在python3 裡面有乙個預設來處理類之間呼叫順序的c3 演算法,c3用來保證每個類只呼叫一次的演算法,所有通過super 來進行呼叫的時候都會根據裡面的順序來進行呼叫 在類中可以通過 cl...