【发布时间】:2012-05-22 03:23:42
【问题描述】:
在集成一个我以前没有使用过的 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
这只是为了清楚起见,还是我错过了最重要的部分:没有它就无法完成的怪异和迷人的事情?
【问题讨论】:
标签: python language-lawyer class-method method-dispatch language-details