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