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

Patricia Arquette
Freigeben: 2024-10-18 06:47:03
Original
244 Leute haben es durchsucht

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

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

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!