Wenn ich versuche, eine statische Methode aus dem Hauptteil der Klasse heraus zu verwenden und die statische Methode mithilfe der integrierten staticmethod
Funktion als Dekorator wie folgt zu definieren:
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
Ich erhalte folgende Fehlermeldung:
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
Ich verstehe, warum dies geschieht (Deskriptorbindung) , und kann es _stat_func()
umgehen, indem ich es nach seiner letzten Verwendung manuell in eine statische Methode konvertiere , wie folgt:
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
Meine Frage lautet also:
Gibt es bessere Möglichkeiten, dies zu erreichen, wie bei saubereren oder "pythonischeren"?
staticmethod
. Sie sind normalerweise als Funktionen auf Modulebene nützlicher. In diesem Fall ist Ihr Problem kein Problem.classmethod
, auf der anderen Seite ...