請(qǐng)問(wèn)代碼中的get_hobby(cls)是什么意思
請(qǐng)問(wèn)下:@classmethod
? ? ? ? ? ? ? ? ? ? ?def get_hobby(cls):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return ?cls.hobby
這里的cls是什么對(duì)象?為什么在調(diào)用時(shí)Programer.get_hobby()中沒(méi)有cls傳入,而是用(空)來(lái)調(diào)用?
請(qǐng)問(wèn)下:@classmethod
? ? ? ? ? ? ? ? ? ? ?def get_hobby(cls):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return ?cls.hobby
這里的cls是什么對(duì)象?為什么在調(diào)用時(shí)Programer.get_hobby()中沒(méi)有cls傳入,而是用(空)來(lái)調(diào)用?
2017-06-20
舉報(bào)
2018-08-16
和self一樣理解就好了,或者你可以理解為“規(guī)定”
2017-06-20
https://www.zhihu.com/question/22869546
2017-06-20
通過(guò)@classmethod,get_hobby()就是一個(gè)類(lèi)方法,cls表示class,在調(diào)用的時(shí)候都是將類(lèi)以隱含的參數(shù)傳遞過(guò)去的,所以是用空來(lái)調(diào)用。
class ParentClass(object):
?? ?
??? var = "test for parent"
??? @classmethod
??? def clsmethod(cls):
??????? print cls.var
class SubClass(ParentClass):
?? ?
??? var = "test for sub"
在這個(gè)例子中,ParentClass.clsmethod輸出為 “test for parent”,而Subclass.clsmethod輸出為“test for sub”,通過(guò)此比較很好的詮釋了@classmethod類(lèi)方法隱式傳入的第一個(gè)參數(shù)也就是cls,是當(dāng)前類(lèi),而不是父類(lèi)。同時(shí)類(lèi)方法操作的是class 類(lèi)對(duì)象提供的內(nèi)部信息。
還有https://www.zhihu.com/question/22869546,在這個(gè)鏈接里面可以看到作者的調(diào)用過(guò)程,比較詳細(xì),希望對(duì)你有幫助。