新式類 經典類與多繼承

2022-09-10 20:39:16 字數 1072 閱讀 5689

python3所有的類都繼承自object類

新式類:

1.python3中,所有類都是新式類

2.python2中主動繼承object類

經典類:

python2中,不繼承object類

#

多繼承:

class a:pass

class b(a):pass

#b繼承a

class c(a):pass

#c繼承a

class d(b, c):pass

#d同時繼承b和c

print(d.mro()) #

類的mro方法只在新式類中有,可以檢視該類的繼承順序

#新式類:廣度優先 可以直接使用類名.mro()方法檢視繼承順序

#當既可以走廣度又可以走深度時,總是廣度再深度

#d = d()

#d.屬性或方法時,本身沒有則從父類中找,順序為d-->b-->c-->a

#經典類:總是深度優先

#d = d()

#d.屬性或方法時,本身沒有則從父類中找,順序為d-->b-->a-->c

"""c3演算法:存在於新式類中,可以通過類.mro()方法檢視繼承順序的結果

如果是單繼承,那麼總是按照子類-->父類的順序來計算

例如:a(o) = [ao]

b(a) = [bao]

c(a) = [cao]

d(b) = [dbao]

e(c) = [ecao]

如果是多繼承,那麼需要按照自己本類,父類1的繼承順序,父類2的繼承順序....

f(d,e) = merge(d(b) + e(c))

= [f] + d(b) + e(c)

= [f] + [dbao] + [ecao]

= fd + [bao] + [ecao]

= fdb + [ao] + [ecao]

= fdbe + [ao] + [cao]

= fdbec + [ao] + [ao]

= fdbeca + [o] + [o]

= fdbecao

"""

繼承 新式類 經典類

目錄 二 利用繼承減少 冗餘 三 繼承的菱形問題 四 如何重用父親的屬性和方法 經典類 python2中有繼承類 新式類 python3中都是新式類 是一種新建類方式,繼承了乙個類,類中的屬性和方法就在子類中 父類 基類 子類 派生類 新式類 只要繼承了object類,在python3中,預設繼承o...

python多繼承(新式類)一

最近在學習python的多重繼承。先來了解下多重繼承的概念,所謂多重繼承,是指python的類可以有兩個以上父類,也即有類a,類b,類c,c同時繼承類a與類b,此時c中可以使用a與b中的屬性與方法。那麼問題來了,如果a與b中具有相同名字的方法,這個時候python怎麼呼叫的會是哪個方法呢?舉個例子 ...

python3 class寫法 新式類 經典類

經典類與新式類 python2和python3中新式類 經典類 舊式類 的區別 python新式類與經典類的區別 經典類 不由任意內建型別派生出的類 新式類 由任意內建型別派生出的類 只要乙個內建型別位於類樹的某個位置 python2.1 只有經典類 python2.2 引入新式類 python3 ...