編程語(yǔ)言排行榜 Python中的cls和self有什么區(qū)別?
Python中的cls和self有什么區(qū)別?對(duì)于普通方法,第一個(gè)參數(shù)必須是self,它表示一個(gè)特定實(shí)例本身。如果忽略靜態(tài)方法,可以將其用作常規(guī)方法。對(duì)于classmethod,第一個(gè)參數(shù)是CLS,而不
Python中的cls和self有什么區(qū)別?
對(duì)于普通方法,第一個(gè)參數(shù)必須是self,它表示一個(gè)特定實(shí)例本身。如果忽略靜態(tài)方法,可以將其用作常規(guī)方法。對(duì)于classmethod,第一個(gè)參數(shù)是CLS,而不是self,它表示類(lèi)本身。>>> A類(lèi)(對(duì)象):def foo1(self):打印“Hello”self@staticmethoddefFoo2():print“Hello”@classmethoddef foo3(CLS):print“Hello”,CLS>>>> a=a()>>> a。foo1()是最常見(jiàn)的調(diào)用方式,但它和下面的方式一樣你好
區(qū)別在于以下兩個(gè)方面:
1。Classmethod類(lèi)方法必須將類(lèi)作為第一個(gè)參數(shù),“can access the class variable”,可以通過(guò)實(shí)例名或類(lèi)名訪問(wèn);
2。靜態(tài)方法Static method不強(qiáng)制傳入self或CLS,對(duì)類(lèi)和實(shí)例一無(wú)所知(相當(dāng)于將class方法變成普通方法,獨(dú)立于類(lèi)),“無(wú)法訪問(wèn)類(lèi)”還可以通過(guò)實(shí)例名或類(lèi)名訪問(wèn)實(shí)例變量。
具體用途如下:
1。Classmethod類(lèi)方法依賴self或CLS來(lái)傳遞參數(shù),因此它必須寫(xiě)在類(lèi)中,與類(lèi)密切相關(guān),并且可以訪問(wèn)類(lèi)外的類(lèi)變量;
2。靜態(tài)方法靜態(tài)方法完全獨(dú)立于類(lèi),因此它不能訪問(wèn)類(lèi)方法。
就這么簡(jiǎn)單。是否需要訪問(wèn)類(lèi)變量取決于是否需要訪問(wèn)類(lèi)方法。