"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment fonctionne Super() de Python 3.x sans arguments et quels sont les pièges potentiels ?

Comment fonctionne Super() de Python 3.x sans arguments et quels sont les pièges potentiels ?

Publié le 2024-11-07
Parcourir:744

 How Does Python 3.x\'s Super() Work Without Arguments, and What Are the Potential Pitfalls?

La Super Magie de Python 3.x : Révéler les Mystères

Python 3.x a introduit une tournure surprenante dans sa méthode super(), permettant appels sans arguments. Ce changement apparemment inoffensif entraîne des conséquences importantes et une magie inhérente.

Découvrir la magie

Pour maintenir le principe DRY, le nouveau comportement super() contourne la classe explicite. appellation. Il possède une cellule classe spéciale qui récupère l'objet de classe d'origine, évitant ainsi les pièges de la reliure qui tourmentaient la super approche précédente.

Conséquences de la magie

Malheureusement, cette magie présente un inconvénient. Relier le nom super() à une variable différente, telle que super_, peut perturber sa fonctionnalité. Cela se produit car la cellule n'est créée que lorsque super ou class est référencé dans une méthode.

Pièges pratiques

Ce comportement peut présenter des risques pour programmeurs sans méfiance :

  • Relier super() pourrait conduire à des exceptions inattendues.
  • S'appuyer sur super(type(self), self) ou super(self.__class__, self) peut entraîner en récursion infinie lorsqu'ils sont invoqués à partir d'une classe dérivée.
  • Les décorateurs de classe qui renvoient de nouveaux objets de classe peuvent invalider la liaison du nom de classe à super().

Au-delà de Super()

Curieusement, super() n'est pas la seule entité pythonique affectée par des problèmes de reliure. D'autres exemples incluent :

  • this dans RPython de PyPy (similaire à __class__ de super())
  • Méthodes d'instance accessibles via des objets de méthode non liés (potentiellement cassant @ property et @classmethod)
  • Intégrés tels que print, object et list lorsqu'ils sont appelés sans notation par points

Implications pour les développeurs

Bien que la magie de super() puisse être utile, elle mérite d'être prudente. Comprendre ses subtilités permet d’éviter les erreurs d’exécution. Lorsqu'ils utilisent des reliures, les programmeurs doivent envisager de référencer explicitement class ou d'utiliser des méthodes d'invocation super() alternatives.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3