„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie unterscheiden sich Funktionen, ungebundene Methoden und gebundene Methoden im Methodenauflösungssystem von Python?

Wie unterscheiden sich Funktionen, ungebundene Methoden und gebundene Methoden im Methodenauflösungssystem von Python?

Veröffentlicht am 10.11.2024
Durchsuche:766

How do Functions, Unbound Methods, and Bound Methods Differ in Python\'s Method Resolution System?

Enthüllung der Natur von Funktionen, ungebundenen Methoden und gebundenen Methoden

Das Konzept von Klassen und Methoden ist grundlegend für objektorientierte Programmierparadigmen . Das Verständnis der Nuancen und Beziehungen zwischen Funktionen, ungebundenen Methoden und gebundenen Methoden ist entscheidend für die Beherrschung der Feinheiten des Methodenauflösungssystems von Python.

Definieren der Entitäten

  • Funktionen: Funktionen werden mit der def-Anweisung erstellt und sind eigenständige Codeeinheiten ohne direkte Verknüpfung mit anderen class.
  • Ungebundene Methoden: Wenn eine Funktion Teil einer Klassendefinition wird, wird sie in eine ungebundene Methode umgewandelt. Dieser Übergang erfolgt automatisch in Python 2, ist jedoch in Python 3 veraltet.
  • Gebundene Methoden: Gebundene Methoden werden durch Zugriff auf eine Methode in einer Klasseninstanz erstellt und erhalten die Instanz implizit als ersten Parameter ( selbst).

Transformationen und Barrierefreiheit

  • Funktion zu ungebundener Methode: Durch die Verwendung von „types.MethodType“ oder den Zugriff auf eine Funktion innerhalb eines Klassenkörpers wird diese effektiv in eine ungebundene Methode konvertiert.
  • Ungebundene Methode zu gebundener Methode: Der Zugriff auf eine ungebundene Methode für eine Klasseninstanz führt zur Erstellung einer Bindung Methode.
  • Funktion an gebundene Methode: Analog zum vorherigen Schritt generiert der direkte Zugriff auf eine Funktion auf einer Klasseninstanz eine gebundene Methode.

Hauptunterschiede

  • Klassenbewusstsein: Eine ungebundene Methode vermittelt Wissen über die Klasse, zu der es gehört, während Funktionen und gebundene Methoden dieses Bewusstsein nicht haben.
  • Instantiierter Zugriff: Im Gegensatz zu ungebundenen Methoden, für deren Ausführung eine Instanz erforderlich ist, können Funktionen und gebundene Methoden direkt aufgerufen werden.

Äquivalenz und Verwendung

In Python 2 und Python 3 Folgendes Ausdrücke sind funktional äquivalent:

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

Durch das Binden einer Funktion an eine Instanz wird eine geänderte Version erstellt, bei der der erste Parameter von Natur aus auf die angegebene Instanz festgelegt ist. Im Wesentlichen verhält sich diese gebundene Methode identisch mit den folgenden alternativen Formen:

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

From Unbound to Bound

Eine Python 2-Instanz einer Klasse hat kein direktes Attribut, das ungebundenen Methoden entspricht stattdessen über das __dict__-Attribut der Klasse selbst abrufbar. Der Zugriff auf eine ungebundene Methode auf einer Instanz führt jedoch zu deren automatischer Konvertierung in eine gebundene Methode.

Schlussfolgerung

Erfassen der Unterschiede zwischen Funktionen, ungebundenen Methoden und gebundenen Methoden ermöglicht es Ihnen, den Methodenauflösungsmechanismus von Python effektiv zu nutzen. Wenn Sie die Mechanismen der Bindung und Transformation verstehen, können Sie die Komplexität der objektorientierten Codierung mühelos bewältigen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3