Maison  >  Article  >  développement back-end  >  En quoi les fonctions, les méthodes non liées et les méthodes liées diffèrent-elles dans le système de résolution de méthodes de Python ?

En quoi les fonctions, les méthodes non liées et les méthodes liées diffèrent-elles dans le système de résolution de méthodes de Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 00:49:02951parcourir

How do Functions, Unbound Methods, and Bound Methods Differ in Python's Method Resolution System?

Dévoilement de la nature des fonctions, des méthodes non liées et des méthodes liées

Le concept de classes et de méthodes est fondamental dans les paradigmes de programmation orientée objet . Comprendre les nuances et les relations entre les fonctions, les méthodes non liées et les méthodes liées est crucial pour maîtriser les subtilités du système de résolution de méthodes de Python.

Définir les entités

  • Fonctions : Créées à l'aide de l'instruction def, les fonctions sont des unités de code autonomes sans association directe avec une classe.
  • Méthodes non liées : Lorsqu'une fonction devient partie d'une classe définition, elle se transforme en une méthode non liée. Cette transition se produit automatiquement dans Python 2 mais est obsolète dans Python 3.
  • Méthodes liées : Créées en accédant à une méthode sur une instance de classe, les méthodes liées reçoivent implicitement l'instance comme premier paramètre ( self).

Transformations et accessibilité

  • Fonction vers la méthode non liée : Utilisation de types.MethodType ou accès à une fonction dans un corps de classe le convertit efficacement en méthode indépendante.
  • Méthode non liée en méthode liée : L'accès à une méthode indépendante sur une instance de classe entraîne la création d'une méthode liée.
  • Fonction vers méthode liée : Analogue à l'étape précédente, l'accès à une fonction sur une instance de classe génère directement une méthode liée.

Différences clés

  • Conscience de classe : Une méthode non liée porte la connaissance de la classe à laquelle elle appartient, tandis que les fonctions et les méthodes liées n'ont pas cette conscience.
  • Accès instancié : Contrairement aux méthodes non liées, qui nécessitent l'exécution d'une instance, les fonctions et les méthodes liées peuvent être appelées directement.

Équivalence et utilisation

Dans les deux Python 2 et Python 3, les expressions suivantes sont fonctionnellement équivalentes :

<code class="python">f1(C())
C.f1(C())
C().f1()</code>

La liaison d'une fonction à une instance crée une version modifiée où le premier paramètre est intrinsèquement défini sur l'instance donnée. Essentiellement, cette méthode liée se comporte de manière identique aux formes alternatives suivantes :

<code class="python">lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())</code>

De non lié à lié

Une instance Python 2 d'une classe n'a pas d'attribut direct correspondant aux méthodes non liées, qui sont récupérables via l'attribut __dict__ de la classe elle-même. Cependant, l'accès à une méthode non liée sur une instance entraîne sa conversion automatique en méthode liée.

Conclusion

Comprendre les distinctions entre les fonctions, les méthodes non liées et les méthodes liées vous permet d'utiliser efficacement le mécanisme de résolution de méthodes de Python. Comprendre les mécanismes de liaison et de transformation vous permet de naviguer facilement dans les complexités du codage orienté objet.

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:
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