Python:可以在类中调用静态方法而无需限定名称

Sid*_*Bob 24 python namespaces class

这很烦人:

class MyClass:
    @staticmethod
    def foo():
        print "hi"

    @staticmethod
    def bar():
        MyClass.foo()
Run Code Online (Sandbox Code Playgroud)

有没有办法让这项工作没有在通话中命名MyClass?即所以我可以foo()在最后一行说?

Ned*_*der 18

没有办法使用foo并获得你想要的东西.没有隐式类范围,因此foo无论是本地还是全局,都不是您想要的.

您可能会发现classmethod更有用:

class MyClass:
    @classmethod
    def foo(cls):
        print "hi"

    @classmethod
    def bar(cls):
        cls.foo()
Run Code Online (Sandbox Code Playgroud)

这样,至少您不必重复该类的名称.

  • 当你不使用课时,为什么要把`foo`变为`classmethod`?我让`foo`成为`staticmethod`和`bar`成为`classmethod`(正如你所做的那样). (9认同)