Когда я пытаюсь использовать статический метод из тела класса, и определяю статический метод, используя встроенную staticmethod
функцию в качестве декоратора, например:
class Klass(object):
@staticmethod # use as decorator
def _stat_func():
return 42
_ANS = _stat_func() # call the staticmethod
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
Я получаю следующую ошибку:
Traceback (most recent call last):<br>
File "call_staticmethod.py", line 1, in <module>
class Klass(object):
File "call_staticmethod.py", line 7, in Klass
_ANS = _stat_func()
TypeError: 'staticmethod' object is not callable
Я понимаю, почему это происходит (привязка дескриптора) , и могу обойти это, вручную преобразовав _stat_func()
метод static после его последнего использования, например, так:
class Klass(object):
def _stat_func():
return 42
_ANS = _stat_func() # use the non-staticmethod version
_stat_func = staticmethod(_stat_func) # convert function to a static method
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
Итак, мой вопрос:
Есть ли лучшие, как в более чистых или более «Pythonic», способы сделать это?
staticmethod
вообще. Они обычно более полезны как функции уровня модуля, и в этом случае ваша проблема не является проблемой.classmethod
с другой стороны ...