是否可以从其他静态方法中调用静态方法

时间:2019-02-11 15:08:15

标签: python

是否可以从另一个静态方法中调用静态方法?

我尝试过:

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

2 个答案:

答案 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的属性,因此必须如此访问。