Warum weisen Methoden keine Referenzgleichheit auf?
In Python behalten Funktionen die Referenzgleichheit bei, Methoden jedoch nicht. Diese Ungleichheit ergibt sich aus der Art und Weise, wie Methoden erstellt werden.
Methodenerstellung
Im Gegensatz zu Funktionen werden Methodenobjekte bei jedem Zugriff instanziiert. Dies liegt daran, dass Methoden im Wesentlichen Deskriptoren sind, die ein Methodenobjekt zurückgeben, wenn ihre .__get__-Methode aufgerufen wird.
What.__dict__['meth'] # Function (not method) object What.__dict__['meth'].__get__(What(), What) # Method object
Testen der Methodengleichheit
In Python 3.8 und höher Die Methodengleichheit wird durch Vergleich der Attribute .__self__ und .__func__ bestimmt. Wenn sie sich auf dieselbe Funktion und Instanz beziehen, gelten die Methoden als gleich. Vor 3.8 war das Methodengleichheitsverhalten jedoch je nach Implementierung der Methode inkonsistent.
Auswirkungen
Diese Variabilität in der Methodengleichheit wirkt sich auf mehrere Szenarien aus:
Lösung zum Testen der Funktionsidentität
Um zu testen, ob Methoden dieselbe zugrunde liegende Funktion darstellen, können Sie können ihre .__func__-Attribute vergleichen:
What().meth.__func__ == What().meth.__func__
Das obige ist der detaillierte Inhalt vonWarum weisen Methoden in Python keine Referenzgleichheit auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!