Warum rebending Super () CODE BRACHEN
In Python 3.x kann die Super () -Funktion ohne Argumente auf die Methoden der Superklasse aufgerufen werden. Dieses Verhalten wird durch einen Zaubertrick mit Kompilierzeit aktiviert, der eine Verbindung zwischen Super () und der Anrufklasse herstellt. Wenn der Supername jedoch auf eine andere Variable (Super_ im Beispiel) abprall ist, ist diese Verbindung unterbrochen.
Der Grund dafür ist der D.R.Y. (Wiederholen Sie sich nicht selbst) Prinzip. Die expliziten Benennung der Anrufklasse in den Aufrufen der Superklasse verstößt gegen dieses Prinzip und erhöht das Risiko, Probleme wiederherzustellen. Die Verwendung von Klassendekoratoren, die den Klassennamen ändern, stört außerdem auch die Referenz auf das Originalklassenobjekt.
, indem sie eine unsichtbare class -Zelle in einer Schließung um die Funktion, die Super () enthält, erstellt hat, vermeidet die magische Implementierung von Super () diese Probleme. Die Zelle bezieht sich auf das ursprüngliche Klassenobjekt und stellt sicher, dass Super () immer auf die richtige Superklasse zugreifen kann, auch wenn der Supername erholt wird.
Während dieses Verhalten überraschend erscheinen mag, ist es wichtig zu beachten, dass Super () oft missbraucht wird. Durch die Vereinfachung der Anrufsyntax und die Vermeidung von unendlichen Fallstricks der Rekursion hilft die aktualisierte Implementierung, Fehler zu verhindern.
Wenn Super erholt wird, wird class in der Methode seine Funktionalität wiederhergestellt. Dies liegt daran, dass die Zelle erstellt wird, wenn entweder Super oder class in der Methode verwendet wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3