Pourquoi la reliure « super() » casse-t-elle votre code Python ?

Patricia Arquette
Libérer: 2024-10-26 11:08:30
original
866 Les gens l'ont consulté

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

Pourquoi la reliure de super() peut casser le code

Dans Python 3.x, la fonction super() peut être appelée sans arguments pour y accéder les méthodes de la superclasse. Ce comportement est activé par un tour de magie au moment de la compilation qui établit une connexion entre super() et la classe appelante. Cependant, si le super nom est renvoyé vers une variable différente (super_ dans l'exemple), cette connexion est rompue.

La raison en est le D.R.Y. (Ne vous répétez pas). Nommer explicitement la classe appelante dans les appels à la superclasse viole ce principe et augmente le risque de problèmes de liaison. De plus, l'utilisation de décorateurs de classe qui modifient le nom de la classe perturbe également la référence à l'objet de classe d'origine.

En créant une cellule class invisible dans une fermeture autour de la fonction contenant super(), le l'implémentation magique de super() évite ces problèmes. La cellule fait référence à l'objet de classe d'origine, garantissant que super() peut toujours accéder à la superclasse correcte, même si le super nom est rebond.

Bien que ce comportement puisse sembler surprenant, il est important de noter que super() est souvent mal utilisé. En simplifiant la syntaxe d'appel et en évitant les pièges de récursion infinie, l'implémentation mise à jour permet d'éviter les erreurs.

Si super est un rebond, le référencement de class dans la méthode restaure sa fonctionnalité. En effet, la cellule est créée lorsque super ou class est utilisé dans la méthode.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!