是否可以从另一个静态方法中调用静态方法?
我尝试过:
class MyClass(object):
@staticmethod
def static_method_1(x):
x = static_method_2(x)
print x
@staticmethod
def static_method_2(x):
return 2*x
这将返回
NameError: name 'static_method_2' is not defined
答案 0 :(得分:7)
通过类MyClass.static_method_2(x)
调用静态方法。
您可能根本不需要静态方法,而只需要类方法。这些调用方式相同,但是获得了对该类的引用,然后可以使用该引用来调用其他方法。
class MyClass(object):
@classmethod
def static_method_1(cls, x):
x = cls.static_method_2(x)
print x
@classmethod
def static_method_2(cls, x):
return 2*x
请注意,在Python中,您永远不会这样做。除非存储状态,否则通常没有理由拥有一个类。这些可能都最好作为独立功能。
答案 1 :(得分:2)
必须通过定义静态方法的类来调用静态方法;否则,这仅仅是它和常规函数之间的唯一区别。
@staticmethod
def static_method_1(x):
x = MyClass.static_method_2(x)
print x
原因是名称static_method_2
没有在全局范围或任何其他非本地范围中定义(请记住,类未定义新的范围)。静态方法只是MyClass
的属性,因此必须如此访问。