Wie funktioniert „super()' in Python 3.x ohne Argumente?

Patricia Arquette
Freigeben: 2024-10-27 02:12:30
Original
227 Leute haben es durchsucht

 How Does `super()` Work Its Magic in Python 3.x Without Any Arguments?

Super() Magic in Python 3.x

In Python 3.x verfügt die super()-Funktion über eine einzigartige Fähigkeit: sie kann ohne Argumente aufgerufen werden. Obwohl dieses Verhalten zunächst überraschend ist, ist es auf eine bewusste Designentscheidung zurückzuführen, die eingeführt wurde, um eine häufige Programmierfalle zu beheben.

Vermeidung von DRY-Verstößen und Mehrdeutigkeit von Klassennamen

Vor Python 3 .x war beim Aufruf von super() eine explizite Benennung der Klasse erforderlich, wie im folgenden Codeausschnitt gezeigt:

<code class="python">class Foo(Bar):
    def baz(self):
        return super(Foo, self).baz() + 42</code>
Nach dem Login kopieren

Dieser Ansatz verstieß jedoch gegen das DRY-Prinzip und war anfällig für Mehrdeutigkeiten des Klassennamens, die durch verursacht wurden globales Rebinding oder Klassendekorateure. Um diese Probleme zu mildern, führte Python 3.x eine magische Implementierung von super() ein.

Nutzung einer Klasse-Zelle für die Laufzeitauflösung

The Die aktuelle Implementierung von super() verwendet eine Klasse-Zelle. Diese Zelle bietet Zugriff auf das ursprüngliche Klassenobjekt und ermöglicht super(), die Oberklasse zur Laufzeit aufzulösen, ohne dass eine explizite Klassenbenennung erforderlich ist. Infolgedessen funktioniert der folgende Code wie vorgesehen, auch wenn Foo neu zugewiesen wird:

<code class="python">class Foo(Bar):
    def baz(self):
        return super().baz() + 42

Spam = Foo
Foo = something_else()

Spam().baz()  # still works</code>
Nach dem Login kopieren

Kompromiss- und Implementierungsdetails

Ursprünglich wurde super() als vorgeschlagen ein Schlüsselwort, aber Bedenken hinsichtlich der Wahrnehmung als „zu magisch“ führten zur aktuellen Implementierung. Guido van Rossum selbst erkannte die potenzielle Mehrdeutigkeit der Verwendung eines anderen Namens für super().

Potenzielle Nachteile

Während das magische Verhalten von super() im Allgemeinen von Vorteil ist, Dies kann zu unerwarteten Ergebnissen führen, wenn die Superklasse dynamisch geändert oder super() umbenannt wird. In solchen Szenarien ist es ratsam, explizit auf die Variable Klasse in der Methode zu verweisen, um die ordnungsgemäße Funktionalität sicherzustellen.

Alternative Beispiele für Funktionen, die von der Umbenennung betroffen sind

Andere Python-Funktionen und -Methoden, die von der Umbenennung betroffen sein können, sind:

  • type()
  • isinstance()
  • issubclass()
  • property()
  • classmethod()
  • staticmethod()

Das obige ist der detaillierte Inhalt vonWie funktioniert „super()' in Python 3.x ohne Argumente?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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!