Python @staticmethod 和 @classmethod之间的区别,,使用@staticmet


使用@staticmethod修饰的静态方法对它所在class一无所知,它只是接受调用的参数。没有隐式的第一参数。使用@staticmethod在python中基本上没用,和把方法放到module文件中没什么区别。

而用@classmethod修饰的是类方法。 这种方法的第一个参数是他所在的类。当你想使用工厂模式时会很有用。你可以传一个指定类的子类给类方法,然后返回子类的实例。

例如下面的DictSubclass从dict继承,当调用dict.dict.fromkeys()时fromkeys的第一个参数为dict,而在调用DictSubclass.fromkeys()时,fromkeys的第一个参数则为DictSubclass

如下代码:

class DictSubclass:    def __repr__(self):        return "DictSubclass"print dict.fromkeys("abc")print DictSubclass.fromkeys("abc")

将输出:

{'a': None, 'c': None, 'b': None}DictSubclass

第一行的输出是dict类调用输出的,而第二个调用则是DictSubclass输出的,后者重写了dict的__repr__方法

评论关闭