Heim  >  Artikel  >  Backend-Entwicklung  >  Warum weisen Methoden in Python keine Referenzgleichheit auf?

Warum weisen Methoden in Python keine Referenzgleichheit auf?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 00:00:291022Durchsuche

Why Do Methods Not Exhibit Reference Equality in Python?

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:

  • Wenn Sie den is-Operator verwenden, um zu prüfen, ob Methoden identisch sind, wird False zurückgegeben, es sei denn, die Methoden sind an dieselbe Instanz und Funktion gebunden.
  • Umgekehrt == Gleichheitsprüfung für Methoden in Python 3.8 liefert erwartete Ergebnisse durch Vergleich der Attribute .__self__ und .__func__.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn