问答详情
源自:3-3 Python面向对象-定义类的方法

请问代码中的get_hobby(cls)是什么意思

请问下:@classmethod

                     def get_hobby(cls):

                             return  cls.hobby

这里的cls是什么对象?为什么在调用时Programer.get_hobby()中没有cls传入,而是用(空)来调用?

提问者:asia2158 2017-06-20 06:06

个回答

  • Verckolf
    2018-08-16 14:41:19

    和self一样理解就好了,或者你可以理解为“规定”

  • 慕移动3158922
    2017-06-20 09:59:53

    https://www.zhihu.com/question/22869546

  • 慕移动3158922
    2017-06-20 09:58:16

    通过@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,在这个链接里面可以看到作者的调用过程,比较详细,希望对你有帮助。