Wenn ich versuche, eine statische Methode aus dem Hauptteil der Klasse heraus zu verwenden und die statische Methode mithilfe der integrierten staticmethodFunktion 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 ...