从类变量引用静态方法

时间:2010-02-03 18:02:19

标签: python static-methods class-variables

我知道有这样的情况,但不知怎的,我有它:

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

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

它的方法是什么?

仅供记录:

我认为这应该被视为python最差的做法。如果有的话,使用静态方法并不是真正的pythoish方式......

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

问题是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中的描述符,请查看the glossary,并且网上有大量文档。另外,请查看this thread,它似乎与您的用例很接近。

为了简单起见,您可以在类定义之外创建c类属性:

class Foo(object):
  @staticmethod
  def test():
    pass

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

或者,如果您愿意,请参阅__metaclass__的文档。