在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中文網其他相關文章!