在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
在Python文档中,classmethod
装饰器的解释如下:
类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。
所以我想cls
指的是Dummy
自己(而class
不是实例)。我不完全理解为什么会这样,因为我总是可以这样做:
type(self).do_something_with_the_class
这仅仅是为了清楚起见,还是我错过了最重要的部分:没有它就无法完成的怪异而令人着迷的事情?