为什么使用classmethod而不是staticmethod?

这个问题在这里已经有了答案:

  • Python中@staticmethod和@classmethod有什么区别? 24个答案

  • 你的例子几乎没有什么区别,但是假设你创建了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

    上一篇: Why use classmethod instead of staticmethod?

    下一篇: Perforce API for Python 2.7