Коли я намагаюся використати статичний метод зсередини тіла класу та визначити статичний метод, використовуючи вбудовану 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()
в статичний метод після останнього використання, наприклад:
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
Отже, моє питання:
Чи є кращі, як у більш чистих чи «пітонічних» способах цього досягти?
staticmethod
. Зазвичай вони є більш корисними як функції на рівні модулів, і в цьому випадку ваша проблема не є проблемою.classmethod
, з іншого боку ...