为什么使用classmethod而不是staticmethod?
这个问题在这里已经有了答案:
  你的例子几乎没有什么区别,但是假设你创建了Foo的子类并且在子类上调用了create_new方法。 
class Bar(Foo):
    pass
obj = Bar.create_new()
  ...然后这个基类会导致创建一个新的Bar对象... 
class Foo:
    @classmethod
    def create_new(cls):
        return cls()
  ...而这个基类会导致创建一个新的Foo对象...... 
class Foo:
    @staticmethod
    def create_new():
        return Foo()
...所以选择取决于你想要的行为。
是的,这两个班级也会这样做。
但是,现在想象一下这个类的一个子类型:
class Bar (Foo):
    pass
  现在调用Bar.create_new做了一些不同的事情。  对于静态方法,你会得到一个Foo 。  对于类方法,你会得到一个Bar 。 
所以重要的区别是类方法获取作为参数传递的类型。
从文档中,类方法接收它的类作为隐式参数,而静态方法不知道它们所在的类。
在您想要用子类中的不同行为覆盖的继承静态方法的情况下,这会很有用。
链接地址: http://www.djcxy.com/p/9167.html