天天看點

《Python參考手冊(第4版•修訂版)》——1.14 對象與類

本節書摘來自異步社群《python參考手冊(第4版•修訂版)》一書中的第1章,第1.14節,作者david m. beazley,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

程式中使用的所有值都是對象。對象由内部資料和各種方法組成,這些方法會執行與這些資料相關的各種操作。前面在處理像字元串和清單這樣的内置類型時,就已經用到了對象和方法。例如:

dir()函數可以列出對象上的可用方法,是進行互動式實驗的有用工具,例如:

檢視對象時,會看到諸如append()和insert()等很熟悉的方法。但也可以看到固定以雙下劃線開始和結束的特殊方法。這些方法用于實作各種語言運算。例如,__add__()方法實作了+運算符的功能:

class語句用于定義新的對象類型,實作面向對象程式設計。例如,下面的類定義了一個支援push()、pop()和length()操作的簡單棧:

在類定義的第一行中,語句class stack(object)将stack聲明為一個object。使用圓括号是python指定繼承的方式——在這個例子中,stack繼承自object,object也是所有python類型的根類型。類定義中使用def語句定義了方法。每個方法中的第一個參數始終指向對象本身。根據約定,該參數的名稱為self。涉及對象屬性的所有操作都必須顯式引用self變量。以雙下劃線開始和結束的方法是特殊的方法。例如,__init__用于在建立對象後初始化該對象。

要想使用類,可編寫如下所示的代碼:

這個例子建立了一個全新的對象來實作棧。但是,棧與内置的清單對象幾乎完全相同。是以,繼承list然後添加一個額外的方法也是可行的:

通常,類中定義的所有方法隻适用于該類的執行個體(即建立的對象)。但是,也可以定義不同種類的方法,如c++和java程式員所熟知的靜态方法,例如:

在這個例子中,@staticmethod将方法聲明為靜态方法。@staticmethod是使用裝飾器(decorator)的一個例子,我們将在第6章中進一步介紹裝飾器。