Heim > Backend-Entwicklung > Python-Tutorial > Wie rufe ich statische Klassenmethoden innerhalb des Klassenkörpers in Python-Versionen <= 3.9 auf?

Wie rufe ich statische Klassenmethoden innerhalb des Klassenkörpers in Python-Versionen <= 3.9 auf?

DDD
Freigeben: 2024-10-18 06:42:02
Original
697 Leute haben es durchsucht

How to Call Class Staticmethods within the Class Body in Python Versions <= 3.9?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage