我知道有这样的情况,但不知怎的,我有它:
class foo
#static method
@staticmethod
def test():
pass
# class variable
c = {'name' : <i want to reference test method here.>}
它的方法是什么?
仅供记录:
我认为这应该被视为python最差的做法。如果有的话,使用静态方法并不是真正的pythoish方式......
答案 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__
的文档。