python 基礎 多重繼承

2022-03-27 03:32:57 字數 2183 閱讀 1953

子類直接呼叫超類 __init__ 方法初始化,當形成鑽石繼承的時候,超類會被多次初始化,可能會有意向不到的問題:

baseclass

oneclass    twoclass

testclass

from pprint import

pprint

class

baseclass(object):

def__init__

(self, a):

#value = a

self.value =a

class

oneclass(baseclass):

def__init__

(self, a):

baseclass.

__init__

(self, a)

#value + 2

self.value += 2

class

twoclass(baseclass):

def__init__

(self, a):

baseclass.

__init__

(self, a)

#value * 2

self.value *= 2

class

testclass(twoclass, oneclass):

def__init__

(self, a):

twoclass.

__init__

(self, a)

oneclass.

__init__

(self, a)

#value + 8

self.value += 8

print

self.value

pprint(testclass.mro())

test = testclass(3) #13#

初始化的過程是:baseclass ——> twoclass ——> baseclass ——> oneclass ——> testclass

#value 的變化: value = 3 ——> value = 6 ——> value = 3 ——> value = 5 ——> value = 13

使用 super 可以解決超類重複初始化的問題,保證超類只被初始化一次:

from pprint import

pprint

class

baseclass(object):

def__init__

(self, a):

#value = a

self.value =a

class

oneclass(baseclass):

def__init__

(self, a):

super(oneclass, self).

__init__

(a)

#value + 2

self.value += 2

class

twoclass(baseclass):

def__init__

(self, a):

super(twoclass, self).

__init__

(a)

#value * 2

self.value *= 2

class

testclass(twoclass, oneclass):

def__init__

(self, a):

super(testclass, self).

__init__

(a)

#value + 8

self.value += 8

print

self.value

pprint(testclass.mro())

"""以以下相反的順序初始化子類

[, ,

, ,]"""

test = testclass(3) #18#

初始化的過程是:baseclass ——> oneclass ——> twoclass ——> testclass

#value 的變化: value = 3 ——> value = 5 ——> value = 10 ——> value = 18

python基礎 多重繼承

繼承多個父類時,子類中使用哪個父類的屬性,跟class語句中這些父類的順序有關係,以前面的父類的屬性為準 在python中使用mro 方法解析順序 這種演算法來查詢多重繼承下使用哪個父類的屬性 class b num 78 class c num 70 class a b,c pass print ...

Python基礎 MixIn設計 多重繼承

如果需要 混入 額外的功能,通過多重繼承就可以實現 示例 usr bin env python3 coding utf 8 多重繼承 飛class fly object deffly print fly 游泳 class swin object defswin print swin 超人 多重繼承 ...

python 多重繼承

python和c 一樣,支援多繼承。概念雖然容易,但是困難的工作是如果子類呼叫乙個自身沒有定義的屬性,它是按照何種順序去到父類尋找呢,尤其是眾多父類中有多個都包含該同名屬性。對經典類和新式類來說,屬性的查詢順序是不同的。現在我們分別看一下經典類和新式類兩種不同的表現 經典類 usr bin pyth...