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