從一個非常簡單的類定義開始:
關鍵字def用于告訴python我們定義了一個新函數,關鍵字class則表明我們定義了一個新類。(object)這部分内容說的是,類color是一種對象;文檔字元串描述了color對象的功能,pass則說明該對象是空白的(即為存放任何資料,也沒有提供任何的新操作)。使用方式如下:
根據定義,顔色亮度就是其最強和最弱的rgb值得平均值對應到0和1之間的那個數值。若寫成函數,如下所示:
若将函數<code>lightness()</code>作為color類的一個方法,如下所示:
需要移除參數color,并将其替換成self參數。當python在調用某個對象中的某個方法時,會自動将該對象的引用作為該方法的第一個參數傳進去。這就意味着,當我們調用lightness時,完全不需要給它傳遞任何參數。使用方式如下:
定義一個方法的時候,除了實際需要傳入的那些參數之外,還必須再多寫一個。相反,在調用某個方法的時候,實際提供的參數要比該方法定義中所需的少一個。
給color類添加一個當建立新color的時候就會被執行的方法。這種方法叫做構造器(constructor);在python中,構造器就是__init__:
名稱兩邊的雙下劃線說明該方法對python有着特殊的意義——這裡的意思就是說,建立新對象的時候,該方法就會被調用。
當需要從某個對象得到一段簡單易懂的資訊時,就會調用__str__;當需要這段資訊更準确時,則會調用__repr__。在使用print時,__str__就會被調用。為了得到有意義的輸出,現在來寫個<code>color.__str__</code>:
python中還有很多特殊方法:python的官方網站上給出了完成的清單。其中就有__add__、__sub__、__eq__等,它們分别在我們用“+”對對象做加法,用“-”對對象做減法、用“==”對對象做比較的時候調用:
這些方法的具體用法:
可以使用<code>help(color)</code>擷取有關color類的幫助資訊:
在面向對象程式設計語言中,定義新類型的手段是:建立新類。類支援封裝,換句話說,類将資料以及相關的操作放在一起,以便使程式的其他部分可以忽略相關的實作細節。
類還支援多态。如果兩個類擁有相同用法的方法,則他們的執行個體可以互相替換,且不會影響到程式的其他部分。這就意味着我們能夠進行“即插即用型”程式設計,即代碼能夠根據所處理的具體類型而執行不同的操作。(多态的意思就是說,某個含有變量的表達式可以根據該變量所引用的對象的實際類型得到不同的結果。)
新類還可以通過“繼承現有類”的方式來進行定義:<code>class child(parent)</code>。系類不僅可以重寫父類的功能特點,而且還可以添加新的功能特點。
當方法被定義在類中時,其第一個參數必須是一個特殊的變量,該變量表示的是調用該方法的那個對象。按照慣例,這個參數成為self。
在python中,部分方法擁有着特殊的預定義含義:為了有所差別,他們的名稱以雙下劃線開頭和結尾。在這些方法中,有的在構造對象時調用(__init__),有的在将對象轉換為字元串時調用(__str__和__repr__),有的則用于模拟算數運算(比如__add__和__sub__)。