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