"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 > 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 ?

Publié le 2024-11-10
Parcourir:246

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 aucun class.
  • Méthodes non liées : Lorsqu'une fonction fait partie d'une définition de classe, elle se transforme en méthode indépendante. 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 ( soi-même).

Transformations et accessibilité

  • Fonction à dissocier Méthode : L'utilisation de types.MethodType ou l'accès à une fonction dans un corps de classe la convertit efficacement en méthode indépendante.
  • Méthode non liée en méthode liée : Accès à une méthode indépendante sur une classe instance entraîne la création d'une méthode liée.
  • Fonction vers la méthode liée : Analogue à l'étape précédente, accéder directement à une fonction sur une instance de classe génère 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. à, alors 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 une instance pour s'exécuter, les fonctions et les méthodes liées peuvent être appelées directement.

Équivalence et utilisation

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

f1(C())
C.f1(C())
C().f1()

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 :

lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())

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 au lieu de cela, récupérable via l'attribut __dict__ de la classe elle-même. Cependant, l'accès à une méthode indépendante sur une instance entraîne sa conversion automatique en méthode liée.

Conclusion

Comprendre les distinctions entre les fonctions, les méthodes indépendantes 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.

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