在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python多重繼承
Python異常處理
Python循環(huán)
Python基本運(yùn)算符
Python網(wǎng)絡(luò)編程(Sockets)
Python可以開發(fā)哪些程序?
Python XML解析和處理
Python數(shù)字
Python函數(shù)
Python變量類型
Python os模塊方法
Python迭代器
Python安裝和環(huán)境配置
Python構(gòu)造函數(shù)
Python文件對象方法
Python日期和時(shí)間
Python的歷史
Python生成器
Python+MySQL數(shù)據(jù)庫操作(PyMySQL)
Python命令行參數(shù)
Python元組
Python發(fā)送郵件
Python列表
Python文件讀寫
Python教程
Python面向?qū)ο螅惡蛯ο螅?/span>
Python多線程編程
Python多重繼承
Python決策
Python是什么?
Python快速入門
Python繼承
Python字典
Python字符串
Python操作符重載
Python正則表達(dá)式
Python閉包
Python修飾器
Python功能特點(diǎn)
Python模塊

Python多重繼承

在本文中,您將了解Python中的多重繼承以及如何在程序中使用它。還將了解多級(jí)繼承和方法解析順序。

與C++一樣,一個(gè)類可以從Python中的多個(gè)基類派生出來。這被稱為多重繼承。

在多重繼承中,所有基類的特征都被繼承到派生類中。多重繼承的語法類似于單繼承。

Python多重繼承示例

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

這里,MultiDerived派生自Base1Base2類。

MultiDerived類從Base1Base2繼承。

Python中的多層繼承

另一方面,我們也可以繼承一個(gè)派生類的形式。這被稱為多級(jí)繼承。 它可以在Python中有任何的深度(層級(jí))。在多級(jí)繼承中,基類和派生類的特性被繼承到新的派生類中。
下面給出了具有相應(yīng)可視化的示例。

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

這里,Derived1派生自Base,Derived2派生自Derived1。

Python中的方法解析順序

Python中的每個(gè)類都派生自類:object。它是Python中最基礎(chǔ)的類型。

所以在技術(shù)上,所有其他類,無論是內(nèi)置還是用戶定義,都是派生類,所有對象都是對象類的實(shí)例。

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

# Output: True
print(isinstance("Hello",object))

在多繼承方案中,在當(dāng)前類中首先搜索任何指定的屬性。如果沒有找到,搜索繼續(xù)進(jìn)入父類,深度優(yōu)先,再到左右的方式,而不需要搜索相同的類兩次。

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

MRO必須防止本地優(yōu)先排序,并提供單調(diào)性。它確保一個(gè)類總是出現(xiàn)在其父類之前,并且在多個(gè)父類的情況下,該順序與基類的元組相同。

一個(gè)類的MRO可以被看作是__mro__屬性或者mro()方法。前者返回一個(gè)元組,而后者返回一個(gè)列表。

>>> 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'>]

這里有一個(gè)更復(fù)雜的多重繼承示例及其可視化圖型。

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

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

print(M.mro())

參考這一點(diǎn),進(jìn)一步討論MRO并了解實(shí)際算法如何計(jì)算。