python中如何定義類?
Python是一門面向對象的編程語言,當然少不了類與對象!在學會用Python定義一個類之前,我們當然得首先了解一下類與對象的基本概念以及包含的內容。
Python類的基本概念Python的類是用關鍵字class,一個類中,一般包含有數據成員和方法。
數據成員,其實就是一個變量,有屬于類的變量,也有屬于某個方法的實例變量;
方法,就是函數,在Python中是用的關鍵字def,方法還可以分為三種類型:普通方法、類方法、靜態方法,稍后細講。
上面的代碼,我定義了一個類Person,注意類名的首字母最好大寫
定義了三個成員變量:sex是在類下面定義的,name和age是在類的構造函數__init__中定義的,這兩種方式都能達到定義成員變量的目的,不過在構造函數中定義的成員變量,可以在構造對象的時候就賦值,而單獨的成員變量要修改,需要給出一個方法才行,這就是一點區別
定義了一個方法: go_to_school,這個方法里面定義了一個變量is_ok(注意,這個is_ok是不能在其他地方使用的,屬于方法的局部變量)
注意:參數self代表類的實例,而非類,類的方法和普通的函數最明顯的區別就是有一個額外的參數,使用self可以在類中調用類的成員變量和方法。
上面就是我們使用Person類創建的對象,然后調用go_to_school方法,結果如下
可以看到,創建對象的參數寫法分了三種方式,這與函數的調用比較類似,畢竟,創建對象就是在調用Person類的構造函數__init__
上面就是Python中類的基本定義和基本使用,當然,還有比較進階一點的知識,比如類的繼承、方法重寫、私有變量和方法、靜態和類方法、運算符重載、內部類等!這里就簡單的提一些常用的。
Python類的繼承Python是面向對象的,所以當然支持類的繼承,而且還支持多繼承。繼承的語法是在類名的后面加括號,寫入被繼承的父類。
例如:class Student(Person):
這樣,Student類(稱作子類)就繼承了Person類(稱為父類),子類也自動擁有了父類的成員變量和方法,繼而可以對父類的方法進行修改(即方法重寫),還可以添加特屬于子類的新方法。
如上,就是具體的類繼承例子,注意super的用法,它是調用父類的構造函數,且傳入的參數很特別,是子類的名稱+self關鍵字,其實super主要是用來多繼承的,單繼繼承的時候完全可以直接使用類名調用父類方法。
不過,由于Python中類的繼承用的并不多,何況是多繼承!所以可以了解一下,用到的時候再查資料也成!
另外,上面還展示了父類方法go_to_shcool的重寫。
類的方法關于類的方法,知識點還是挺多的,首先:
私有方法:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用 ,不能在類地外部調用。比如:
同理,兩個下劃線開頭的成員變量也是私有的,稱私有屬性,只能在類內部調用。
另外,類還有一些專有方法,常見的如下:
使用dir()函數可以查看類和對象的所有屬性與方法。
最后,我們來說一下類的靜態方法(時常會用到)。何為靜態,就是不需要創建對象,直接使用類名調用即可。
對應的,還有一種使用不多的類方法,它傳遞的參數是類,也就是class,在一般使用中參數為cls,這個cls和self的地位一致,不過self代表的是實例化后的對象,cls是代表的類本身。
定義了一個類TestMethod,它繼承自基類object(其實,默認就是這樣,所有類都繼承自object,不用寫都行)
定義了常規方法foo、靜態方法static_foo、類方法class_foo,注意他們上面的@開頭的聲明,這是Python中的裝飾器,具體知識點不在這里討論,不過見名知意,一個代表靜態,一個代表類方法。
然后我們執行起來
可以看到執行結果為:
其中要說明的是,靜態方法和類方法都可以直接使用類名來調用。
就分享這么多,希望讀者有所收獲!謝謝!