Python從設計之初就已是一門面向對象的語言,正由於如此,在Python中建立一個類和對象是很容易的。本章節咱們將詳細介紹Python的面向對象編程。html
若是你之前沒有接觸過面向對象的編程語言,那你可能須要先了解一些面嚮對象語言的一些基本特徵,在頭腦裏頭造成一個基本的面向對象的概念,這樣有助於你更容易的學習Python的面向對象編程。python
接下來咱們先來簡單的瞭解下面向對象的一些基本特徵。編程
和其它編程語言相比,Python 在儘量不增長新的語法和語義的狀況下加入了類機制。數據結構
Python中的類提供了面向對象編程的全部基本功能:類的繼承機制容許多個基類,派生類能夠覆蓋基類中的任何方法,方法中能夠調用基類中的同名方法。編程語言
對象能夠包含任意數量和類型的數據。ide
語法格式以下:函數
類實例化後,可使用其屬性,實際上,建立一個類以後,能夠經過類名訪問其屬性。學習
類對象支持兩種操做:屬性引用和實例化。ui
屬性引用使用和 Python 中全部的屬性引用同樣的標準語法:obj.name。this
類對象建立後,類命名空間中全部的命名都是有效屬性名。因此若是類定義是這樣:
以上建立了一個新的類實例並將該對象賦給局部變量 x,x 爲空的對象。
執行以上程序輸出結果爲:
MyClass 類的屬性 i 爲: 12345 MyClass 類的方法 f 輸出爲: hello world
類有一個名爲 __init__() 的特殊方法(構造方法),該方法在類實例化時會自動調用,像下面這樣:
類定義了 __init__() 方法,類的實例化操做會自動調用 __init__() 方法。以下實例化類 MyClass,對應的 __init__() 方法就會被調用:
x = MyClass()
固然, __init__() 方法能夠有參數,參數經過 __init__() 傳遞到類的實例化操做上。例如:
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。
以上實例執行結果爲:
<__main__.Test instance at 0x100771878>
__main__.Test
從執行結果能夠很明顯的看出,self 表明的是類的實例,表明當前對象的地址,而 self.class 則指向類。
self 不是 python 關鍵字,咱們把他換成 runoob 也是能夠正常執行的:
以上實例執行結果爲:
<__main__.Test instance at 0x100771878>
__main__.Test
在類的內部,使用 def 關鍵字來定義一個方法,與通常函數定義不一樣,類方法必須包含參數 self, 且爲第一個參數,self 表明的是類的實例。
執行以上程序輸出結果爲:
runoob 說: 我 10 歲。
Python 一樣支持類的繼承,若是一種語言不支持繼承,類就沒有什麼意義。派生類的定義以下所示:
BaseClassName(示例中的基類名)必須與派生類定義在一個做用域內。除了類,還能夠用表達式,基類定義在另外一個模塊中時這一點很是有用:
class DerivedClassName(modname.BaseClassName):
執行以上程序輸出結果爲:
ken 說: 我 10 歲了,我在讀 3 年級
Python一樣有限的支持多繼承形式。多繼承的類定義形以下例:
須要注意圓括號中父類的順序,如果父類中有相同的方法名,而在子類使用時未指定,python從左至右搜索 即方法在子類中未找到時,從左到右查找父類中是否包含方法。