Heim  >  Artikel  >  Backend-Entwicklung  >  Warum bricht das erneute Binden von „super()“ Ihren Python-Code?

Warum bricht das erneute Binden von „super()“ Ihren Python-Code?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 11:08:30853Durchsuche

 Why Does Rebinding `super()` Break Your Python Code?

Warum das erneute Binden von super() Code beschädigen kann

In Python 3.x kann die Funktion super() ohne Argumente für den Zugriff aufgerufen werden die Methoden der Oberklasse. Dieses Verhalten wird durch einen Zaubertrick zur Kompilierungszeit ermöglicht, der eine Verbindung zwischen super() und der aufrufenden Klasse herstellt. Wenn der Supername jedoch an eine andere Variable (im Beispiel super_) zurückgebunden wird, wird diese Verbindung unterbrochen.

Der Grund dafür ist das D.R.Y. (Don't Repeat Yourself)-Prinzip. Die explizite Benennung der aufrufenden Klasse in Aufrufen der Oberklasse verstößt gegen dieses Prinzip und erhöht das Risiko von Rebinding-Problemen. Darüber hinaus unterbricht die Verwendung von Klassendekoratoren, die den Klassennamen ändern, auch den Verweis auf das ursprüngliche Klassenobjekt.

Durch die Erstellung einer unsichtbaren Klasse-Zelle innerhalb eines Abschlusses um die Funktion, die super() enthält, wird die Die magische Implementierung von super() vermeidet diese Probleme. Die Zelle verweist auf das ursprüngliche Klassenobjekt und stellt so sicher, dass super() immer auf die richtige Superklasse zugreifen kann, auch wenn der Supername zurückgesetzt wird.

Obwohl dieses Verhalten überraschend erscheinen mag, ist es wichtig zu beachten, dass super() dies ist oft missbraucht. Durch die Vereinfachung der Aufrufsyntax und die Vermeidung unendlicher Rekursionsfallen trägt die aktualisierte Implementierung dazu bei, Fehler zu vermeiden.

Wenn super ein Rebound ist, stellt die Referenzierung der Klasse in der Methode ihre Funktionalität wieder her. Dies liegt daran, dass die Zelle erstellt wird, wenn entweder super oder class innerhalb der Methode verwendet wird.

Das obige ist der detaillierte Inhalt vonWarum bricht das erneute Binden von „super()“ Ihren Python-Code?. 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