Heim >Backend-Entwicklung >Python-Tutorial >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?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 00:49:021058Durchsuche

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: Mit der def-Anweisung erstellt, sind Funktionen eigenständige Codeeinheiten ohne direkte Zuordnung zu einer Klasse.
  • Ungebundene Methoden: Wenn eine Funktion Teil einer Klasse wird Definition verwandelt es sich in eine ungebundene Methode. Dieser Übergang erfolgt automatisch in Python 2, ist jedoch in Python 3 veraltet.
  • Gebundene Methoden:Gebundene Methoden werden durch den Zugriff auf eine Methode in einer Klasseninstanz erstellt und erhalten die Instanz implizit als ersten Parameter ( self).

Transformationen und Zugänglichkeit

  • Funktion zur ungebundenen Methode:Verwenden von „types.MethodType“ oder Zugreifen auf eine Funktion darin Ein Klassenkörper wandelt ihn effektiv in eine ungebundene Methode um.
  • Ungebundene Methode in gebundene Methode: Der Zugriff auf eine ungebundene Methode in einer Klasseninstanz führt zur Erstellung einer gebundenen Methode.
  • Funktion zu gebundener Methode: Analog zum vorherigen Schritt generiert der Zugriff auf eine Funktion in einer Klasseninstanz direkt eine gebundene Methode.

Hauptunterschiede

  • Klassenbewusstsein:Eine ungebundene Methode trägt Wissen über die Klasse, zu der sie gehört, während Funktionen und gebundenen Methoden dieses Bewusstsein fehlt.
  • Instanziierter 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 beiden Python 2 und Python 3 sind die folgenden Ausdrücke funktional äquivalent:

<code class="python">f1(C())
C.f1(C())
C().f1()</code>

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

<code class="python">lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())</code>

Von ungebunden zu gebunden

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

Fazit

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

Das obige ist der detaillierte Inhalt vonWie unterscheiden sich Funktionen, ungebundene Methoden und gebundene Methoden im Methodenauflösungssystem von Python?. 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