Quando tento usar um método estático de dentro do corpo da classe e defino o método estático usando a staticmethod
função interna como decorador, desta forma:
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
Estou tendo o erro a seguir:
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
Entendo por que isso está acontecendo (ligação do descritor) e posso contornar isso convertendo-o manualmente _stat_func()
em um método estático após seu último uso, da seguinte forma:
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
Então, minha pergunta é:
Existem melhores, como em formas mais limpas ou mais "pitônicas", para conseguir isso?
staticmethod
. Eles geralmente são mais úteis como funções no nível do módulo; nesse caso, seu problema não é um problema.classmethod
, Por outro lado ...