-6

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

class C(object):

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

m = "Hello World!"
C.show(C,message=m)

The message is: Hello World!

4

4 回答 4

3

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

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

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

于 2013-08-13T14:46:07.063 回答
2

你应该使用@classmethod

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

classmethoda和 a之间的区别在于staticmethod后者对它的封闭类一无所知,而前者则(通过cls参数)。Astaticmethod可以很容易地在类之外声明。

如果您不想show()了解有关 的任何信息,请在 .之外C使用@staticmethod或声明。show()C

于 2013-08-13T14:15:35.320 回答
2

你应该使用@staticmethod

@staticmethod
def show(message):
    print("The message is: {}".format(message))
于 2013-08-13T14:16:37.393 回答
1

你可以使用装饰器@classmethod。这不会造成问题。此外

如果为派生类调用类方法,则派生类对象作为隐含的第一个参数 ( http://docs.python.org/3.3/library/functions.html#classmethod ) 传递。

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!

[<class '__main__.C2'>] The message is: Hello World!

于 2013-08-13T14:42:39.547 回答