Python 模仿静态方法

Python 模仿静态方法,python,python-3.x,Python,Python 3.x,这是在Python中模拟静态方法的正确方法吗?Python允许静态方法吗 class C(object): def show(self,message): print("The message is: {}".format(message)) m = "Hello World!" C.show(C,message=m) 信息是:你好,世界 您应该使用: classmethod和staticmethod的区别在于后者不知道它的封闭类,而前者通过cls参数知道。stat

这是在Python中模拟静态方法的正确方法吗?Python允许静态方法吗

class C(object):

    def show(self,message):
        print("The message is: {}".format(message))

m = "Hello World!"
C.show(C,message=m)
信息是:你好,世界

您应该使用:

classmethod和staticmethod的区别在于后者不知道它的封闭类,而前者通过cls参数知道。staticmethod可以很容易地在类之外声明

如果您不想让show了解C,请使用@staticmethod或在C之外声明show。

您应该使用:

您可以使用decorator@classmethod。这不会造成问题。另外

如果为派生类调用类方法,则派生类 对象作为隐含的第一个参数传递


[]信息是:你好,世界

静态方法从其他语言的惯用翻译通常是模块级方法

def show(message):
    print("The message is: {}".format(message))

告诉您python有@staticmethods的答案是正确的,但也有误导性:只使用模块级函数通常是正确的。

在classmethods上,最好使用cls而不是self。@glglglgl Right,谢谢:这是错误的。请参阅@glglgl-answer@JHarris-Ist是另一种有效的方法;它也会起作用。然而,我的更干净。它确实有效,但不正确;对不起,@阿沙吉,无法抗拒模仿你的答案1:1:这完全取决于他们是在C++风格的静态方法AKA、Python类方法或Python静态方法,这很少有任何USEI猜测。JoCrNeTres是正确的,我们缺少一些上下文。静态方法适用于不在实例上运行的分组功能。看雷蒙德·海廷格在PyCon上的课堂工具演讲,了解更多关于这方面的内容。否决票?为什么?据我们目前所知,这绝对不是完全错误的。如果有人否决了你的问题,你就否决了你所有的答案?哇!
@staticmethod
def show(message):
    print("The message is: {}".format(message))
class C1(object):

    @classmethod
    def show(cls,message):
        print("[{}] The message is: {}".format(cls,message))

class C2(C1):
    pass

m = "Hello World!"
C2.show(message=m)
# vs. C1.show(message=m) with output [<class '__main__.C1'>] The message is: Hello World!
def show(message):
    print("The message is: {}".format(message))