Maison développement back-end Tutoriel Python Comment « super() » fonctionne-t-il comme par magie dans Python 3.x sans aucun argument ?

Comment « super() » fonctionne-t-il comme par magie dans Python 3.x sans aucun argument ?

Oct 27, 2024 am 02:12 AM

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

Super() Magic dans Python 3.x

Dans Python 3.x, la fonction super() possède une capacité unique : elle peut être invoqué sans aucun argument. Ce comportement, bien qu'initialement surprenant, découle d'un choix de conception délibéré introduit pour résoudre un piège de programmation courant.

Éviter les violations DRY et l'ambiguïté des noms de classe

Avant Python 3 .x, un nom explicite de la classe était requis lors de l'appel de super(), comme le montre l'extrait de code suivant :

<code class="python">class Foo(Bar):
    def baz(self):
        return super(Foo, self).baz() + 42</code>
Copier après la connexion

Cependant, cette approche violait le principe DRY et était sensible à l'ambiguïté du nom de classe causée par Reliure globale ou décorateurs de classe. Pour atténuer ces problèmes, Python 3.x a introduit une implémentation magique de super().

Exploiter une cellule Class pour la résolution d'exécution

Le l'implémentation actuelle de super() utilise une cellule class. Cette cellule donne accès à l'objet de classe d'origine, permettant à super() de résoudre la superclasse au moment de l'exécution sans avoir besoin d'un nom de classe explicite. En conséquence, le code suivant fonctionne comme prévu, même si Foo est réaffecté :

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

Spam = Foo
Foo = something_else()

Spam().baz()  # still works</code>
Copier après la connexion

Détails du compromis et de l'implémentation

Initialement, super() a été proposé comme un mot-clé, mais les inquiétudes quant à sa perception comme « trop magique » ont conduit à la mise en œuvre actuelle. Guido van Rossum lui-même a reconnu l'ambiguïté potentielle de l'utilisation d'un nom différent pour super().

Inconvénients potentiels

Bien que le comportement magique de super() soit généralement bénéfique, cela peut conduire à des résultats inattendus si la superclasse est modifiée dynamiquement ou si super() est renommé. Dans de tels scénarios, il est conseillé de référencer explicitement la variable class dans la méthode pour garantir une fonctionnalité correcte.

Exemples alternatifs de fonctions impactées par le changement de nom

Les autres fonctions et méthodes Python qui peuvent être affectées par le changement de nom incluent :

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

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!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la belle soupe pour analyser HTML? Comment utiliser la belle soupe pour analyser HTML? Mar 10, 2025 pm 06:54 PM

Comment utiliser la belle soupe pour analyser HTML?

Filtrage d'image en python Filtrage d'image en python Mar 03, 2025 am 09:44 AM

Filtrage d'image en python

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Mar 05, 2025 am 09:58 AM

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte

Comment travailler avec des documents PDF à l'aide de Python Comment travailler avec des documents PDF à l'aide de Python Mar 02, 2025 am 09:54 AM

Comment travailler avec des documents PDF à l'aide de Python

Comment se cacher en utilisant Redis dans les applications Django Comment se cacher en utilisant Redis dans les applications Django Mar 02, 2025 am 10:10 AM

Comment se cacher en utilisant Redis dans les applications Django

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Mar 10, 2025 pm 06:52 PM

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?

Comment implémenter votre propre structure de données dans Python Comment implémenter votre propre structure de données dans Python Mar 03, 2025 am 09:28 AM

Comment implémenter votre propre structure de données dans Python

Introduction à la programmation parallèle et simultanée dans Python Introduction à la programmation parallèle et simultanée dans Python Mar 03, 2025 am 10:32 AM

Introduction à la programmation parallèle et simultanée dans Python

See all articles