Heim >Backend-Entwicklung >Python-Tutorial >Wie rufe ich statische Klassenmethoden aus dem Klassenkörper in Python auf?

Wie rufe ich statische Klassenmethoden aus dem Klassenkörper in Python auf?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-18 06:47:03324Durchsuche

How to Call Class Static Methods from within the Class Body in Python?

Aufrufen einer statischen Klassenmethode innerhalb des Klassenkörpers in Python

Für Python-Versionen 3.10 und höher ist der Aufruf einer statischen Methode innerhalb des Klassenkörpers unkompliziert. Für Versionen 3.9 und früher stellt dies jedoch eine Herausforderung dar.

Fehler aufgetreten

Beim Versuch, eine statische Methode aus dem Klassenkörper heraus aufzurufen, kann der folgende Fehler auftreten:

TypeError: 'staticmethod' object is not callable

Dieser Fehler tritt auf, weil statische Methoden, wenn sie mit dem Staticmethod-Dekorator deklariert werden, zu Deskriptoren werden. Deskriptoren werden an die Klasse und nicht an die Instanz gebunden, wodurch sie aus dem Klassenkörper heraus nicht zugänglich sind.

Problemumgehung mithilfe des __func__-Attributs

Eine Problemumgehung besteht darin, über das __func__-Attribut des auf die ursprüngliche Rohfunktion zuzugreifen statisches Methodenobjekt:

<code class="python">class Klass(object):

    @staticmethod
    def stat_func():
        return 42

    _ANS = stat_func.__func__()  # call the staticmethod

    def method(self):
        ret = Klass.stat_func()
        return ret</code>

Zusätzliche Hinweise

  • Während die obige Problemumgehung funktionsfähig ist, ist das __func__-Attribut ein Implementierungsdetail und kann sich in zukünftigen Python-Versionen ändern.
  • Für Python-Versionen 3.10 und höher ist das Aufrufen statischer Methoden aus dem Klassenkörper heraus unkompliziert, wie unten gezeigt:
<code class="python">class Klass(object):

    @staticmethod
    def stat_func():
        return 42

    def method(self):
        ret = Klass.stat_func()
        return ret</code>

Das obige ist der detaillierte Inhalt vonWie rufe ich statische Klassenmethoden aus dem Klassenkörper in Python auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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