Heim > Backend-Entwicklung > Python-Tutorial > Wie binde ich ungebundene Methoden in Python, ohne sie aufzurufen?

Wie binde ich ungebundene Methoden in Python, ohne sie aufzurufen?

Barbara Streisand
Freigeben: 2024-10-30 01:22:03
Original
632 Leute haben es durchsucht

How to Bind Unbound Methods in Python Without Invoking Them?

Den Gordischen Knoten lösen: Ungebundene Methoden nahtlos binden

In Python kann das Binden ungebundener Methoden, ohne sie aufzurufen, eine Codierungsherausforderung darstellen. Stellen Sie sich dieses Szenario vor:

<code class="python">class MyWidget(wx.Window):
    buttons = [("OK", OnOK), ("Cancel", OnCancel)]

    def setup(self):
        for text, handler in MyWidget.buttons:
            b = wx.Button(parent, label=text).bind(wx.EVT_BUTTON, handler)</code>
Nach dem Login kopieren

Hier stellt der Handler eine ungebundene Methode dar, die zu Laufzeitfehlern führt. Während functools.partial eine Problemumgehung bietet, bieten die in Python integrierten Deskriptorfunktionen eine elegante Lösung.

Enthüllung der Leistungsfähigkeit von Deskriptoren

Alle Funktionen in Python verfügen über intrinsische Deskriptoreigenschaften. Durch die Nutzung ihrer __get__-Methode können ungebundene Methoden an eine Instanz gebunden werden:

<code class="python">bound_handler = handler.__get__(self, MyWidget)</code>
Nach dem Login kopieren

Diese Technik ermöglicht die Bindung ungebundener Methoden, ohne deren Ausführung auszulösen.

Ein umfassendes Beispiel

Zur Veranschaulichung implementieren wir eine benutzerdefinierte Bindungsfunktion:

<code class="python">def bind(instance, func, as_name=None):
    if as_name is None:
        as_name = func.__name__
    bound_method = func.__get__(instance, instance.__class__)
    setattr(instance, as_name, bound_method)
    return bound_method</code>
Nach dem Login kopieren

Mit dieser Bindungsfunktion können wir die gewünschte Funktionalität erreichen:

<code class="python">class Thing:
    def __init__(self, val):
        self.val = val

something = Thing(21)

def double(self):
    return 2 * self.val

bind(something, double)
something.double()  # returns 42</code>
Nach dem Login kopieren

Indem wir die Mit der Kraft der Deskriptoren binden wir mühelos ungebundene Methoden und erschließen so eine Vielzahl von Codierungsmöglichkeiten, ohne Kompromisse bei den Python-Prinzipien einzugehen.

Das obige ist der detaillierte Inhalt vonWie binde ich ungebundene Methoden in Python, ohne sie aufzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage