Lorsque je tente d'utiliser une méthode statique à partir du corps de la classe, et que je définis la méthode statique à l'aide de la fonction intégrée staticmethod
comme un décorateur, comme ceci :
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
Je reçois l'erreur suivante :
Traceback (most recent call last):
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
Je comprends pourquoi cela se produit (liaison des descripteurs). et vous pouvez le contourner en convertissant manuellement _stat_func()
en une méthode statique après sa dernière utilisation, comme ceci :
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
Donc ma question est :
Existe-t-il des moyens plus propres ou plus "pythoniques" d'accomplir cette tâche ?