Cuando intento usar un método estático desde dentro del cuerpo de la clase, y definir el método estático usando la staticmethod
función incorporada como decorador, así:
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
Obtuve el siguiente error:
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
Entiendo por qué sucede esto (enlace del descriptor) , y puedo _stat_func()
solucionarlo convirtiéndolo manualmente en un método estático después de su último uso, así:
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
Entonces mi pregunta es:
¿Hay mejores formas, como en limpia o más "pitón", de lograr esto?
staticmethod
en absoluto. Por lo general, son más útiles como funciones de nivel de módulo, en cuyo caso su problema no es un problema.classmethod
, por otro lado ...