3

我知道有这样一个案例是有道理的,但不知何故我有它:

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

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

有什么办法呢?

仅作记录:

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

4

2 回答 2

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

    # class variable
    c = {'name' : test }
于 2010-02-03T18:05:59.317 回答
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__.

于 2010-02-04T10:54:24.853 回答