从类变量引用静态方法

3

我知道这种情况很奇怪,但不知何故我遇到了:

class foo
  #static method
  @staticmethod
  def test():
    pass

  # class variable
  c = {'name' : <i want to reference test method here.>}

怎么做呢?

仅供参考:

我认为这应该被视为Python的最差实践。如果可以的话,使用静态方法并不是Python的方式...


1
如果可能的话,您应该考虑使用新式类。 - Georg Schölly
另外,请注意通常不应使用staticmethod。Python有普通函数可用于此应用。 - Mike Graham
这仍然不是Python的语法正确。 - SilentGhost
2个回答

5
class Foo:
    # static method
    @staticmethod
    def test():
        pass

    # class variable
    c = {'name' : test }

4
问题是Python中的静态方法是描述符对象。因此在下面的代码中:
class Foo:
    # static method
    @staticmethod
    def test():
        pass

    # class variable
    c = {'name' : test }
Foo.c['name'] 是描述符对象,因此不可调用。您需要键入 Foo.c['name'].__get__(None, Foo)() 来正确调用此处的 test()。如果您不熟悉Python中的描述符,请查看术语表,并且网上有大量文档可供参考。此外,请查看此线程,该线程似乎接近您的用例。
为了保持简单,您可以在类定义之外创建那个 c 类属性。
class Foo(object):
  @staticmethod
  def test():
    pass

Foo.c = {'name': Foo.test}

或者,如果你感觉可以的话,深入研究__metaclass__的文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接