Cuando intento usar un método estático desde dentro del cuerpo de la clase, y definir el método estático usando la staticmethodfunció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?
staticmethoden 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 ...