Проблема в том, что статические методы в 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__
.