Python 新式類和舊式類

2021-09-24 10:08:44 字數 445 閱讀 3623

新式類很早在2.2就出現了,所以舊式類完全是相容的問題,python3裡的類全部都是新式類.這裡有乙個mro問題可以了解下(新式類繼承是根據c3演算法,舊式類是深度優先),class a():

def foo1(self):

print 「a」

class b(a):

def foo2(self):

pass

class c(a):

def foo1(self):

print 「c」

class d(b, c):

pass

d = d()

d.foo1()

按照經典類的查詢順序從左到右深度優先的規則,在訪問d.foo1()的時候,d這個類是沒有的…那麼往上查詢,先找到b,裡面沒有,深度優先,訪問a,找到了foo1(),所以這時候呼叫的是a的foo1(),從而導致c重寫的foo1()被繞過

python 新式類和舊式類

python的新式類是2.2版本引進來的,我們可以將之前的類叫做經典類或者舊類。為什麼要在2.2中引進new style class呢?官方給的解釋是 為了統一類 class 和型別 type 在2.2之前,比如2.1版本中,類和型別是不同的,如a是classa的乙個例項,那麼a.class 返回 ...

python 新式類和舊式類

新式類和舊式類 python的新式類是2.2版本引進來的,我們可以將之前的類叫做經典類或者舊類。為什麼要在2.2中引進new style class呢?官方給的解釋是 為了統一類 class 和型別 type 在2.2之前,比如2.1版本中,類和型別是不同的,如a是classa的乙個例項,那麼a.c...

python 新式類和舊式類

python的新式類是2.2版本引進來的,我們可以將之前的類叫做經典類或者舊類。為什麼要在2.2中引進new style class呢?官方給的解釋是 為了統一類 class 和型別 type 在2.2之前,比如2.1版本中,類和型別是不同的,如a是classa的乙個例項,那麼a.class 返回 ...