繼承規(guī)則
與其他基于類(lèi)的語(yǔ)言一樣,可以通過(guò)繼承組合多個(gè)類(lèi)定義。 類(lèi)定義可以擴(kuò)展(或繼承)多個(gè)其他類(lèi)。這些類(lèi)又可以擴(kuò)展其他類(lèi)。
請(qǐng)注意,類(lèi)不能繼承 Python 中定義的類(lèi)(即 .py 文件中包含的類(lèi)定義),反之亦然。
以下小節(jié)提供了中類(lèi)繼承的基本規(guī)則。
繼承順序
使用以下繼承順序規(guī)則:
- 默認(rèn)情況下,如果在多個(gè)超類(lèi)中定義了給定名稱(chēng)的類(lèi)成員,則子類(lèi)將從超類(lèi)列表中最左邊的類(lèi)中獲取定義。
- 如果類(lèi)定義包含
Inheritance = right,則子類(lèi)從超類(lèi)列表中最右側(cè)的類(lèi)中獲取定義。
由于歷史原因,大多數(shù)類(lèi)都包含 Inheritance = right。
主要的超類(lèi)
任何擴(kuò)展其他類(lèi)的類(lèi)都有一個(gè)主要超類(lèi)。
無(wú)論類(lèi)使用哪種繼承順序,主超類(lèi)都是第一個(gè),從左到右閱讀。
對(duì)于任何類(lèi)級(jí)編譯器關(guān)鍵字,給定類(lèi)使用其主超類(lèi)中指定的值。
對(duì)于持久化類(lèi)來(lái)說(shuō),主超類(lèi)尤其重要。
最具體的類(lèi)型類(lèi)Most-Specific Type Class
盡管一個(gè)對(duì)象可以是屬于多個(gè)類(lèi)extent的實(shí)例(例如各種超類(lèi)的extent),但它始終具有最特定的類(lèi)型類(lèi) (MSTC)。當(dāng)該對(duì)象是該類(lèi)的實(shí)例但不是該類(lèi)的任何子類(lèi)的實(shí)例時(shí),類(lèi)是該對(duì)象的最具體類(lèi)型。
重寫(xiě)方法
類(lèi)從其一個(gè)或多個(gè)超類(lèi)繼承方法(類(lèi)方法和實(shí)例方法),可以覆蓋這些方法。如果這樣做,必須確保方法定義中的簽名與要重寫(xiě)的方法的簽名匹配。子類(lèi)方法的每個(gè)參數(shù)必須使用與超類(lèi)方法的參數(shù)相同的數(shù)據(jù)類(lèi)型,或者該數(shù)據(jù)類(lèi)型的子類(lèi)。但是,子類(lèi)中的方法可以指定超類(lèi)中未定義的其他參數(shù)。
可以使用 Python 方法覆蓋以 ObjectScript 編寫(xiě)的方法,反之亦然,只要方法簽名匹配即可。
在子類(lèi)的方法中,可以引用它在超類(lèi)中重寫(xiě)的方法。要在 ObjectScript 中執(zhí)行此操作,請(qǐng)使用 ##super() 語(yǔ)法。例如:
//overrides method inherited from a superclass
Method MyMethod() [ Language = objectscript ]
{
//execute MyMethod as implemented in the superclass
do ##super()
//do more things....
}
注意:##super 不區(qū)分大小寫(xiě)。
-
編譯器
+關(guān)注
關(guān)注
1文章
1669瀏覽量
51060 -
數(shù)據(jù)類(lèi)型
+關(guān)注
關(guān)注
0文章
237瀏覽量
14105 -
python
+關(guān)注
關(guān)注
57文章
4856瀏覽量
89529
發(fā)布評(píng)論請(qǐng)先 登錄
Python多重繼承使用方法
Python與C#對(duì)比
如何使用Python的類(lèi)? 優(yōu)勢(shì)有哪些?
淺析多繼承派生類(lèi)中的虛基類(lèi)
Java類(lèi)的繼承與派生
python開(kāi)發(fā)之‘類(lèi)’講解
C++中類(lèi)的繼承訪問(wèn)級(jí)別學(xué)習(xí)總結(jié)(二)
python類(lèi)的繼承詳解
Python到底是如何實(shí)現(xiàn)繼承的呢
SystemVerilog中的類(lèi)的繼承
簡(jiǎn)述類(lèi)的繼承

Python中類(lèi)繼承的基本規(guī)則
評(píng)論