Maison  >  Article  >  développement back-end  >  Pourquoi les méthodes ne présentent-elles pas d'égalité de référence en Python ?

Pourquoi les méthodes ne présentent-elles pas d'égalité de référence en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 00:00:291030parcourir

Why Do Methods Not Exhibit Reference Equality in Python?

Pourquoi les méthodes ne présentent-elles pas d'égalité de référence ?

En Python, alors que les fonctions maintiennent l'égalité de référence, les méthodes ne le font pas. Cette disparité provient de la manière dont les méthodes sont créées.

Création de méthodes

Contrairement aux fonctions, les objets méthodes sont instanciés à chaque accès. En effet, les méthodes sont essentiellement des descripteurs, qui renvoient un objet méthode lorsque leur méthode .__get__ est invoquée.

What.__dict__['meth']  # Function (not method) object
What.__dict__['meth'].__get__(What(), What)  # Method object

Test d'égalité des méthodes

Dans Python 3.8 et versions ultérieures , l'égalité des méthodes est déterminée en comparant les attributs .__self__ et .__func__. Si elles font référence à la même fonction et à la même instance, les méthodes sont considérées comme égales. Cependant, avant la version 3.8, le comportement de l'égalité des méthodes était incohérent selon l'implémentation de la méthode.

Implications

Cette variabilité de l'égalité des méthodes affecte plusieurs scénarios :

  • Lorsque vous utilisez l'opérateur is pour vérifier si les méthodes sont identiques, il renvoie False sauf si les méthodes sont liées à la même instance et à la même fonction.
  • À l'inverse, == test d'égalité pour les méthodes en Python 3.8 fournit les résultats attendus en comparant les attributs .__self__ et .__func__.

Solution pour tester l'identité de la fonction

Pour tester si les méthodes représentent la même fonction sous-jacente, vous peuvent comparer leurs attributs .__func__ :

What().meth.__func__ == What().meth.__func__

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