我以为我开始掌握编程的"Python方式".类的方法接受self作为第一个参数来引用正在调用该方法的上下文的类的实例.@ classmethod装饰器引用一个方法,其功能与类相关联,但不引用具体实例.
那么,如果没有实例引用调用该方法,那么@classmethod(规范'self')的第一个参数是什么意思?
类本身:
类方法接收类作为隐式的第一个参数,就像实例方法接收实例一样.
class C: @classmethod def f(cls): print(cls.__name__, type(cls)) >>> C.f() C
这是cls
规范的,顺便说一下
classmethod的第一个参数cls
按约定命名,并引用调用它的方法的类对象.
>>> class A(object): ... @classmethod ... def m(cls): ... print cls is A ... print issubclass(cls, A) >>> class B(A): pass >>> a = A() >>> a.m() True True >>> b = B() >>> b.m() False True