Python-Version <= 3.9: Aufruf einer statischen Klassenmethode innerhalb des Klassenkörpers
Problem:
Beim Versuch, eine statische Methode aus dem Klassenkörper heraus mit dem Staticmethod-Dekorator aufzurufen, werden Staticmethod-Objekte als nicht aufrufbar befunden, was zu einem TypeError führt. Dieses Verhalten tritt aufgrund der Deskriptorbindung auf.
Problemumgehung:
Eine Problemumgehung besteht darin, die statische Methode nach ihrer letzten Verwendung manuell in eine statische Methode umzuwandeln:
<code class="python">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
Sauberere Python-Methode:
Für Python-Versionen <= 3.9 kann man das __func__-Attribut von staticmethod-Objekten verwenden, um die Rohfunktion aufzurufen:
<code class="python">class Klass(object): @staticmethod # Use as decorator def stat_func(): return 42 _ANS = stat_func.__func__() # Call the staticmethod def method(self): ret = Klass.stat_func() return ret
Für Python-Versionen >= 3.10:
In Python-Versionen 3.10 und höher können staticmethod-Funktionen ohne Probleme direkt aus dem Klassenbereich aufgerufen werden.
Das obige ist der detaillierte Inhalt vonWie rufe ich statische Klassenmethoden innerhalb des Klassenkörpers in Python-Versionen <= 3.9 auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!