天天看點

面向對象程式設計

所有的新式類必須繼承至少一個父類,參數bases可以是一個(單繼承)或多個(多重繼承)用于繼承的父類。

object是“所有類之母”。如果你的類沒有繼承任何其他父類,object将作為預設的父類。它位于所有類繼承結構的最上層。

如果你沒有指定一個父類,或者如果所有子類化的基本類沒有父類,你就這樣建立了一個經典類。

建立一個執行個體的過程稱作執行個體化。

你不需要在構造器中,或其他任何地方為它們預先聲明或者指派。

調用一個方法的最終途徑必須是這樣的:

(1)定義類(和方法)

(2)建立一個執行個體

(3)最後一步,用這個執行個體調用方法

self參數代表執行個體對象本身。

你不需要自己傳遞self進來,因為它是自動傳入的。

python把self作為第一個參數傳遞進來。

在python中,__init__()實際上不是一個構造器。

python建立執行個體後,在執行個體化過程中,調用__init__()方法,當一個類被執行個體化時,就可以定義額外的行為,去執行某些特定的任務或設定。

執行個體化調用時,它會自動調用__init__()。self把執行個體對象自動傳入__init__()。

如果不存在預設的參數,那麼傳給__init__()的兩個參數在執行個體化時是必須的。

靠繼承來進行子類化是建立和定制新類類型的一種方式。

python中,當一個類被派生出來,子類就繼承了基類的屬性。

類名通常由大寫字母打頭。

在python中,所有的類屬性都是公開的,但名字可能被“混淆”了,以阻止未經授權的通路,但僅此而已,再也沒有其他預防措施了。

合成擴充了對類的描述,使得多個不同的類合成為一個大的類。

派生描述了子類的建立,新類保留已存類類型中所有需要的資料和行為,但允許修改或者其他的自定義操作,都不會修改原類的定義。

泛化表示所有子類與其父類及祖先類有一樣的特點。

多态的概念指出了對象如何通過他們共同的屬性和動作來操作及通路,而不需考慮他們具體的類。

自省表示如果傳一個對象給你,你可以查出它有什麼能力。

類和函數最大的不同在于你運作函數,而類會建立一個對象。

盡管類是對象,但正被定義時,他們還不是對象的實作。

類還允許派生。你可以建立一個子類,它也是類,而且繼續了父類所有的特征和屬性。

類通常在一個子產品的頂層進行定義,以便類執行個體能夠在類所定義的源代碼檔案中的任何地方被建立。

聲明與定義類沒有什麼差別,因為他們是同時進行的。

通常,python中所有方法都有一個限制:在調用前,需要建立一個執行個體。

靜态成員通常僅用來跟蹤與類相關的值。大多數情況下,你會考慮用執行個體屬性,而不是類屬性。

python嚴格要求,沒有執行個體,方法是不能被調用的。在此,方法必須綁定到一個執行個體才能直接被調用。

要知道一個類有哪些屬性,有兩種方法:

①使用dir()内建函數:傳回一個名字清單

②通路類的字典屬性__dict__:傳回一個字典

文檔字元串不會被派生類繼承,也就是說派生類必須含有他們自己的文檔字元串。

python支援子產品間的類繼承。

類C的全名是“__main__.C”

如果說類是一種資料結構定義類型,那麼執行個體則聲明了一個這種類型的變量。換言之,執行個體是有生命的類。

當你定義一個類時,并沒有建立一個新的類型,而是僅僅一個類對象。

當類被調用,執行個體化的第一步是建立執行個體對象。一旦對象建立了,python檢查是否實作了__init__()方法。預設情況下,如果沒有定義(或覆寫)特殊方法__init__(),對執行個體不會施加任何特别的操作。

__new__()會調用父類的__new__()來建立對象。__new__()必須傳回一個合法的執行個體。__new__()和__init__()在類建立時,都傳入了相同參數。

解構器隻能被調用一次,一旦引用計數為0,則對象就被清除了。

python能夠在“運作時”建立執行個體屬性。python不僅是動态類型,而且在運作時,允許這些對象屬性的動态建立。

屬性在條件語句中建立,如果該條件語句塊并未被執行,屬性也就不存在,而你在後面的代碼中試着去通路這些屬性,就會有錯誤發生。

預設參數應當是不變的對象。

執行個體有個__dict__()的特殊屬性,它是執行個體屬性構成的一個字典。

你可以采用類來通路類屬性,如果執行個體沒有同名的屬性的話,你也可以用執行個體來通路。

使用執行個體屬性來試着修改類屬性是很危險的。修改類屬性需要使用類名,而不是執行個體名。

方法僅僅是類内部定義的函數。方法隻有在其所屬的類擁有執行個體時,才能被調用。

任何一個方法定義中的第一個參數都是變量self,它表示調用此方法的執行個體對象。

當你還沒有一個執行個體并且需要調用一個非綁定方法的時候你必須傳遞self參數。

一個類被定義後,目标就是要把它當成一個子產品來使用,并把這些對象嵌入到你的代碼中去,同其他資料類型及邏輯執行流混合使用。

如果你在子類中覆寫了__init__(),子類被執行個體化時,基類的__init__()就不會被自動調用。

使用super()時,不需要明确給出任何基類名字。也就是說不需要明确提供父類。

我們是通過調用父類的構造器來建立真實的對象的,float.__new__()。注意,所有的__new__()方法都是類方法,我們要顯式地傳入類作為第一個參數。

本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/1960334,如需轉載請自行聯系原作者

下一篇: React-router