Python中是否可以有无需初始化类即可调用的静态方法,例如:
ClassName.static_method()
是的,使用staticmethod装饰器
staticmethod
class MyClass(object): @staticmethod def the_static_method(x): print(x) MyClass.the_static_method(2) # outputs 2
请注意,某些代码可能使用旧的方法来定义静态方法,而将其staticmethod用作函数而不是装饰器。仅当你必须支持Python的旧版本(2.2和2.3)时,才应使用此选项。
class MyClass(object): def the_static_method(x): print(x) the_static_method = staticmethod(the_static_method) MyClass.the_static_method(2) # outputs 2
这与第一个示例完全相同(使用@staticmethod),只是不使用漂亮的装饰器语法
@staticmethod
最后,要staticmethod()谨慎使用!在极少数情况下,Python中需要使用静态方法,而我已经看到它们使用过很多次,而使用单独的“顶层”函数会更加清楚。
staticmethod()
以下是文档的逐字记录:
静态方法不会收到隐式的第一个参数。要声明静态方法,请使用以下惯用法:
class C: @staticmethod def f(arg1, arg2, ...): ...
@staticmethod形式是一个函数装饰器 –有关详细信息,请参见函数定义中的函数定义说明。
可以在类(如C.f())或实例(如C().f())上调用它。该实例除其类外均被忽略。
C.f()
C().f()
Python中的静态方法类似于Java或C ++中的静态方法。有关更高级的概念,请参见classmethod()。
classmethod()
有关静态方法的更多信息,请参阅标准类型层次结构中有关标准类型层次结构的文档。
2.2版中的新功能。
在版本2.4中更改:添加了函数装饰器语法。