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