python教程 python靜態(tài)方法作用?
python靜態(tài)方法作用?主要用于在類中封裝一個額外的功能,但是使用時我們并不希望調(diào)用的時候還先要創(chuàng)建實(shí)例化對象,與類本身沒有聯(lián)系,相當(dāng)于類中一個獨(dú)立的函數(shù)。python為什么要使用靜態(tài)方法?Pyth
python靜態(tài)方法作用?
主要用于在類中封裝一個額外的功能,但是使用時我們并不希望調(diào)用的時候還先要創(chuàng)建實(shí)例化對象,與類本身沒有聯(lián)系,相當(dāng)于類中一個獨(dú)立的函數(shù)。
python為什么要使用靜態(tài)方法?
Python使用靜態(tài)方法類似函數(shù)工具使用,一般盡量少用靜態(tài)方法。
Python的靜態(tài)方法和類成員方法都可以被類或?qū)嵗L問,兩者概念不容易理清,但還是有區(qū)別的:
1.靜態(tài)方法無需傳入self參數(shù),類成員方法需傳入代表本類的cls參數(shù);
2.從第1條,靜態(tài)方法是無法訪問實(shí)例變量的,而類成員方法也同樣無法訪問實(shí)例變量,但可以訪問類變量;
3.靜態(tài)方法有點(diǎn)像函數(shù)工具庫的作用,而類成員方法則更接近類似Java面向?qū)ο蟾拍钪械撵o態(tài)方法。
python類方法和靜態(tài)方法有什么用?
Python中至少有三種比較常見的方法類型,即實(shí)例方法,類方法、靜態(tài)方法。它們是如何定義的呢?如何調(diào)用的呢?它們又有何區(qū)別和作用呢?且看下文。
首先,這三種方法都定義在類中。下面我先簡單說一下怎么定義和調(diào)用的。(PS:實(shí)例對象的權(quán)限最大。)
實(shí)例方法
定義:第一個參數(shù)必須是實(shí)例對象,該參數(shù)名一般約定為“self”,通過它來傳遞實(shí)例的屬性和方法(也可以傳類的屬性和方法);
調(diào)用:只能由實(shí)例對象調(diào)用。
類方法
定義:使用裝飾器@classmethod。第一個參數(shù)必須是當(dāng)前類對象,該參數(shù)名一般約定為“cls”,通過它來傳遞類的屬性和方法(不能傳實(shí)例的屬性和方法);
調(diào)用:實(shí)例對象和類對象都可以調(diào)用。
靜態(tài)方法
定義:使用裝飾器@staticmethod。參數(shù)隨意,沒有“self”和“cls”參數(shù),但是方法體中不能使用類或?qū)嵗娜魏螌傩院头椒ǎ?/p>
調(diào)用:實(shí)例對象和類對象都可以調(diào)用。
實(shí)例方法
簡而言之,實(shí)例方法就是類的實(shí)例能夠使用的方法。這里不做過多解釋。
類方法
使用裝飾器@classmethod。
原則上,類方法是將類本身作為對象進(jìn)行操作的方法。假設(shè)有個方法,且這個方法在邏輯上采用類本身作為對象來調(diào)用更合理,那么這個方法就可以定義為類方法。另外,如果需要繼承,也可以定義為類方法。
如下場景:
假設(shè)我有一個學(xué)生類和一個班級類,想要實(shí)現(xiàn)的功能為:
執(zhí)行班級人數(shù)增加的操作、獲得班級的總?cè)藬?shù);
學(xué)生類繼承自班級類,每實(shí)例化一個學(xué)生,班級人數(shù)都能增加;
最后,我想定義一些學(xué)生,獲得班級中的總?cè)藬?shù)。
思考:這個問題用類方法做比較合適,為什么?因?yàn)槲覍?shí)例化的是學(xué)生,但是如果我從學(xué)生這一個實(shí)例中獲得班級總?cè)藬?shù),在邏輯上顯然是不合理的。同時,如果想要獲得班級總?cè)藬?shù),如果生成一個班級的實(shí)例也是沒有必要的。
Python中的classmethod和staticmethod有什么具體用途?
classmethod和staticmethod在不需要實(shí)例化的情況下,能夠讓類方法在類以外直接調(diào)用。
區(qū)別在以下兩個方面:
1.classmethod類方法,必須把類作為第一個參數(shù),「可以訪問類變量」,可以通過實(shí)例名或類名訪問;
2.staticmethod靜態(tài)方法,不強(qiáng)制傳入self或者cls,對類和實(shí)例都一無所知(相當(dāng)于把類方法變成一個普通的方法,與類無關(guān)),「不能訪問類變量」,「也不能訪問實(shí)例變量」;可以通過實(shí)例名或類名訪問。
具體用途為:
1.classmethod類方法,依賴self或者cls傳參,所以必須寫在類里,與類強(qiáng)關(guān)聯(lián),可以在類之外,訪問類變量;
2.staticmethod靜態(tài)方法,完全獨(dú)立于類,因此不能訪問類方法。
就那么簡單,根據(jù)是否需要訪問類變量,取決于是否需要訪問類方法。
說通俗點(diǎn),就是方便在沒有實(shí)例化的情況下,直接調(diào)用類方法,上述兩個東西都能實(shí)現(xiàn)該目的。