首頁  >  文章  >  後端開發  >  如何在Python中綁定未綁定的方法而不觸發呼叫?

如何在Python中綁定未綁定的方法而不觸發呼叫?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 11:26:02809瀏覽

How Can I Bind Unbound Methods in Python Without Triggering Invocation?

無需呼叫即可綁定未綁定方法

在Python 中,定義類別級元組列表(其中每個元組代表一個按鈕及其對應的事件處理程序)可以增強資料組織。但是,將未綁定方法綁定到實例而不觸發其執行可能會帶來挑戰。

當事件處理程序值是未綁定方法時,就會出現此問題,從而導致運行時錯誤。雖然 functools.partial 提供了一種解決方法,但更 Pythonic 的方法是利用函數的描述子行為。

描述符(包括函數)有一個 __get__ 方法,在呼叫該方法時,會將函數綁定到實例。利用此方法,我們可以如下綁定未綁定方法:

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

此技術有效地將未綁定方法處理程序綁定到 MyWidget 實例而不呼叫它。

或者,可以封裝可重複使用函數此綁定邏輯:

<code class="python">def bind(instance, func, as_name=None):
    """
    Bind the function *func* to *instance*, with either provided name *as_name*
    or the existing name of *func*. The provided *func* should accept the 
    instance as the first argument, i.e. "self".
    """
    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>

此函數允許靈活綁定自訂名稱:

<code class="python">something = Thing(21)

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

bind(something, double)
something.double()  # returns 42</code>

以上是如何在Python中綁定未綁定的方法而不觸發呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn