亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對象和類

Python 日期和時間

Python 高級知識

Python 參考手冊

Python 多重繼承

在本文中,您將學(xué)習(xí)什么是Python中的多重繼承以及如何在程序中使用它。 您還將了解多級繼承和方法解析順序。

Python中的多重繼承

像C ++一樣,一個可以從Python中的多個基類派生。這稱為多重繼承。

在多重繼承中,所有基類的功能都繼承到派生類中。多重繼承的語法類似于單一繼承。

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

在這里,MultiDerived源自類Base1Base2。

Python中的多重繼承

MultiDerived類從Base1和Base2繼承。

Python中的多級繼承

另一方面,我們也可以繼承派生類。這稱為多級繼承。在Python中可以是任何深度。

在多級繼承中,基類和派生類的功能被繼承到新的派生類中。

下面給出了具有相應(yīng)可視化效果的示例。

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

在此,Derived1Base派生,Derived2Derived1派生。

Python中的多級繼承

Python中的方法解析順序

Python中的每個類都派生自該類object。它是Python中最基本的類型。

因此,從技術(shù)上講,所有其他類(內(nèi)置的或用戶定義的)都是派生類,而所有對象都是object類的示例。

# 輸出: True
print(issubclass(list,object))

# 輸出: True
print(isinstance(5.5,object))

# 輸出: True
print(isinstance("Hello",object))

在多繼承方案中,將在當(dāng)前類中首先搜索任何指定的屬性。如果未找到,則搜索將以深度優(yōu)先,從左到右的方式繼續(xù)進入父類,而無需兩次搜索相同的類。

所以,在上面的實例中MultiDerived類中的搜索順序是[ MultiDerived,Base1,Base2,object]。該順序也稱為MultiDerived類的線性化,用于查找該順序的規(guī)則集稱為“ 方法解析順序(MRO)”。

MRO必須防止本地優(yōu)先級排序,并且還必須提供單調(diào)性。它可以確保一個類始終出現(xiàn)在其父級之前,如果有多個父級,則其順序與基類的元組相同。

可以將類的MRO視為__mro__屬性或mro()方法。前者返回一個元組,而后者返回一個列表。

>>> MultiDerived.__mro__
(<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>)

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>]

這是一個稍微復(fù)雜的多重繼承示例及其可視化以及MRO。

多重繼承可視化

class X: pass
class Y: pass
class Z: pass

class A(X,Y): pass
class B(Y,Z): pass

class M(B,A,Z): pass

# 輸出:
# [<class '__main__.M'>, <class '__main__.B'>,
# <class '__main__.A'>, <class '__main__.X'>,
# <class '__main__.Y'>, <class '__main__.Z'>,
# <class 'object'>]

print(M.mro())

請參考此內(nèi)容,以進一步討論MRO,并了解實際算法的計算方式。