Python的:可以从类中调用静态方法,而不必限定名称(Python: possible to ca

2019-07-18 06:20发布

这是烦人:

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

    @staticmethod
    def bar():
        MyClass.foo()

有没有一种方法,使这项工作没有在通话命名MyClass的? 即这样我就可以说foo()的最后一行?

Answer 1:

有没有办法使用foo ,并得到你想要的。 没有隐含的类的范围内,所以foo是一个局部或全局,这两者都不想要。

您可能会发现classmethods更多有用:

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

    @classmethod
    def bar(cls):
        cls.foo()

这样一来,至少你不必重复类的名称。



Answer 2:

不可能。 这是语言设计的问题。 相比之下,C ++,其中两个this (同为Python的self ;在Python你必须写self.var ,在C ++中您可以写信只是var ,而不是this->var )和自己的类成员函数的默认情况下使用,你可能会看到,有时这是很好的,有时是很烦人。 可能唯一的一点是习惯该功能。



Answer 3:

您可以通过模块级功能做一些哈克foo ,然后将它添加到类的命名空间与staticmethod

def foo():
    print "hi"

class MyClass(object):
    foo = staticmethod(foo)

    @classmethod
    def bar(cls):
        return cls.foo()

    def baz(self):
        return foo()


c = MyClass()
c.bar()
c.baz()

MyClass.bar()
MyClass.foo()


文章来源: Python: possible to call static method from within class without qualifying the name