Python案例 多重繼承問題的解決

2021-09-10 07:00:10 字數 1469 閱讀 5158

# 支援多繼承的物件導向程式設計都可能會導致鑽石繼承(菱形繼承)問題,看以下**:

class a():

def __init__(self):

print("進入a…")

print("離開a…")

class b(a):

def __init__(self):

print("進入b…")

a.__init__(self)

print("離開b…")

class c(a):

def __init__(self):

print("進入c…")

a.__init__(self)

print("離開c…")

class d(b, c):

def __init__(self):

print("進入d…")

b.__init__(self)

c.__init__(self)

print("離開d…")

結果顯示為:

>>>d = d()

進入d…

進入b…

進入a…

離開a…

離開b…

進入c…

進入a…

離開a…

離開c…

離開d…

a進了兩次,現做優化:

#此時召喚super大神!!!

class a():

def __init__(self):

print("進入a…")

print("離開a…")

class b(a):

def __init__(self):

print("進入b…")

super().__init__()

print("離開b…")

class c(a):

def __init__(self):

print("進入c…")

super().__init__()

print("離開c…")

class d(b, c):

def __init__(self):

print("進入d…")

super().__init__()

print("離開d…")

結果顯示為:

>>>d = d()

進入d…

進入b…

進入c…

進入a…

離開a…

離開c…

離開b…

離開d…

python的多重繼承

在設計類的繼承關係時,通常,主線都是單一繼承下來的,如果需要 混入 額外的功能,通過多重繼承就可以實現,這種設計通常稱之為mixin。class animal object pass class mammal animal pass class runnable object def run sel...

python的多重繼承

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

python 多重繼承

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