4

在 Dive Into Python 中,Mark Pilgrim 说:

在定义你的类方法时,你必须明确地将 self 作为每个方法的第一个参数

然后他在代码中给出了几个例子:

def clear(self): self.data.clear()
def copy(self):
    if self.__class__ is UserDict:
        return UserDict(self.data)
    import copy
    return copy.copy(self)

在网上浏览一些 Python 代码时,我遇到了@classmethod装饰器。一个例子是:

class Logger:
    @classmethod
    def debug(msg):
        print "DEBUG: " + msg

(注意函数中没有self参数debug

self使用作为第一个参数和使用@classmethod装饰器定义类方法有什么区别吗?如果不是,那么定义类方法的一种方法是否比另一种更常用/更受欢迎?

4

2 回答 2

7

@classmethod与定义实例方法不同。定义的函数@classmethod接收作为第一个参数,而不是接收特定实例的实例方法。有关更多信息,请参阅此处的 Python 文档。

于 2012-10-21T23:51:51.897 回答
0

self 不是,也永远不会是隐含的。

“自我不会变得含蓄。

让自我明确是一件好事。它通过消除关于变量如何解析的歧义来使代码清晰。它还使函数和方法之间的差异变小。”

http://www.python.org/dev/peps/pep-3099/

于 2012-10-21T23:55:16.780 回答