Heim >Backend-Entwicklung >Python-Tutorial >Wie binde ich ungebundene Methoden an Instanzen in Python?

Wie binde ich ungebundene Methoden an Instanzen in Python?

DDD
DDDOriginal
2024-11-03 23:05:31972Durchsuche

How to Bind Unbound Methods to Instances in Python?

Binden ungebundener Methoden in Python

Das Binden ungebundener Methoden an Instanzen ist eine häufige Aufgabe in der Python-Programmierung, insbesondere bei der Arbeit mit Frameworks wie wxPython. Der einfache Aufruf der Methode bind() für eine ungebundene Methode führt jedoch zu einem Fehler.

Das Problem

Beim Binden einer ungebundenen Methode schlägt das Programm aufgrund ungebundener Methoden fehl erfordern den Aufruf einer Instanz. Wenn Sie sie direkt binden, ohne sie aufzurufen, wird ein Fehler generiert.

Die Lösung

Glücklicherweise gibt es zwei Lösungen für dieses Problem.

Verwenden Deskriptoren

Funktionen in Python sind auch Deskriptoren, was bedeutet, dass sie eine haben get-Methode. Diese Methode ermöglicht die Bindung ungebundener Methoden an Instanzen. So binden Sie eine ungebundene Methode mithilfe von Deskriptoren:

bound_handler = handler.__get__(self, MyWidget)

Verwenden einer benutzerdefinierten Bindungsfunktion

Alternativ können Sie eine benutzerdefinierte Bindungsfunktion wie bind() aus dem Beispiel verwenden unten:

def bind(instance, func, as_name=None):
    bound_method = func.__get__(instance, instance.__class__)
    setattr(instance, as_name, bound_method)
    return bound_method

Mit dieser Funktion können Sie eine ungebundene Methode mit einer benutzerdefinierten Methode verknüpfen Name.

Fazit

Durch die Verwendung entweder des Deskriptoransatzes oder einer benutzerdefinierten Bindungsfunktion können Sie ungebundene Methoden binden, ohne sie aufzurufen, und so eine saubere und wartbare Codestruktur ermöglichen.

Das obige ist der detaillierte Inhalt vonWie binde ich ungebundene Methoden an Instanzen in 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