python裝飾器詳解看完徹底明白了 python類方法和靜態(tài)方法有什么用?
python類方法和靜態(tài)方法有什么用?Python中至少有三種比較較常見的方法類型,即實(shí)例方法,類方法、動(dòng)態(tài)和靜態(tài)方法。它們是怎么定義的呢?怎么動(dòng)態(tài)鏈接庫的呢?它們又有何區(qū)別和作用呢?休提下文。簡單,
python類方法和靜態(tài)方法有什么用?
Python中至少有三種比較較常見的方法類型,即實(shí)例方法,類方法、動(dòng)態(tài)和靜態(tài)方法。它們是怎么定義的呢?怎么動(dòng)態(tài)鏈接庫的呢?它們又有何區(qū)別和作用呢?休提下文。
簡單,這三種方法都定義法在類中。下面我先簡單說看看怎末定義和動(dòng)態(tài)鏈接庫的。(PS:實(shí)例對象的權(quán)限最大。)
實(shí)例方法
定義:第一個(gè)參數(shù)必須是實(shí)例對象,該參數(shù)名就像約定為“self”,實(shí)際它來訊息傳遞實(shí)例的屬性和方法(也可以傳類的屬性和方法);
全局函數(shù):只有由實(shí)例對象全局函數(shù)。
類方法
定義:使用裝飾器@classmethod。另一個(gè)參數(shù)必須是當(dāng)前類對象,該參數(shù)名像是約定為“cls”,按照它來傳達(dá)類的屬性和方法(不能不能傳實(shí)例的屬性和方法);
內(nèi)部函數(shù):實(shí)例對象和類對象都也可以動(dòng)態(tài)創(chuàng)建。
靜態(tài)方法
定義:在用裝飾器@staticmethod。參數(shù)隨便地,也沒“self”和“cls”參數(shù),但方法體中又不能建議使用類或?qū)嵗娜魏螌傩院头椒ǎ?/p>
動(dòng)態(tài)鏈接庫:實(shí)例對象和類對象都是可以內(nèi)部函數(shù)。
實(shí)例方法
簡而言之,實(shí)例方法那是類的實(shí)例能在用的方法。這里不做過多的話解釋。
類方法
使用裝飾器@classmethod。
原則上,類方法是將類本身才是對象進(jìn)行操作的方法。題中有個(gè)方法,且這個(gè)方法在邏輯上區(qū)分類本身充當(dāng)對象來動(dòng)態(tài)創(chuàng)建更合理,那就這個(gè)方法就可以定義法為類方法。另外,如果不是必須無法繼承,也是可以定義法為類方法。
如下場景:
題中我有一個(gè)學(xué)生類和一個(gè)班級類,想實(shí)現(xiàn)的功能為:
先執(zhí)行班級人數(shù)增加的操作、完成班級的總?cè)藬?shù);
學(xué)生類能繼承自班級類,每實(shí)例化一個(gè)學(xué)生,班級人數(shù)都能增強(qiáng);
到最后,我想符號表示一些學(xué)生,完成任務(wù)班級中的總?cè)藬?shù)。
認(rèn)真的思考:這個(gè)問題用類方法做比較好比較好,為啥?畢竟我類的對象的是學(xué)生,但是如果我從學(xué)生這一個(gè)實(shí)例中完成班級總?cè)藬?shù),在邏輯上很顯然是不合理的。同樣,要是想我得到班級總?cè)藬?shù),假如化合一個(gè)班級的實(shí)例確實(shí)是沒有必要的。
python中如何快速創(chuàng)建多個(gè)對象?
先講下基本概念,你所說的的未系統(tǒng)初始化的類,我把它叫做類對象,重新初始化的類叫實(shí)例對象。
類對象中有個(gè)字典,存了class域下的所有函數(shù)對象。
其中,把一個(gè)函數(shù)用@classmethod可以修飾后,這個(gè)函數(shù)就變的了類方法,在類對象生成氣體的時(shí)候就類的對象了,并傳去了一個(gè)參數(shù),像是這個(gè)參數(shù)參數(shù)名為cls。
把一個(gè)函數(shù)用@staticmethod稍微修飾后,這個(gè)函數(shù)也是類的靜態(tài)動(dòng)態(tài)方法,不過應(yīng)該不會(huì)默認(rèn)傳一個(gè)cls參數(shù)。
假如用不著上述事項(xiàng)裝飾器可以修飾,這個(gè)函數(shù)應(yīng)該是類的實(shí)例方法,會(huì)設(shè)置傳一個(gè)參數(shù),這個(gè)參數(shù)一般說來其它名字為self。
而這個(gè)self,不需要__init__函數(shù)執(zhí)行幫一下忙,才會(huì)告訴實(shí)例方法,這那就是重新初始化。
但是,python是動(dòng)態(tài)語言,上述事項(xiàng)規(guī)則基本是靠約定俗稱,講解器中沒有很強(qiáng)的約束。
一連要?dú)w納到的化,你這里的不帶參數(shù)的方法,應(yīng)該歸到staticmethod里面,在不好算可以使用時(shí)應(yīng)該要再加一個(gè)修飾符,承諾這是一個(gè)staticmethod。
當(dāng)然了這個(gè)方法有什么用呢?但是好像沒什么大用,classmethod是可以的,而staticmethod并非要的。
我只是在把class當(dāng)作用域帶的時(shí)候或把class當(dāng)字典用的時(shí)候,用過這個(gè)方法。