在Python中定义类方法的多种方法?

时间:2012-10-21 23:47:06

标签: python class methods

在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装饰器定义类方法有什么不同吗?如果没有,是一种定义更常用/优先的类方法的方法吗?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

自我不是,永远不会隐含。

"自我不会变得含蓄。

让自己明确是一件好事。它通过消除变量如何解析的模糊性来使代码清晰。它也使功能和方法之间的区别变小。"

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