首页 > 后端开发 > Python教程 > 如何在Python中绑定未绑定的方法而不触发调用?

如何在Python中绑定未绑定的方法而不触发调用?

Mary-Kate Olsen
发布: 2024-11-02 11:26:02
原创
821 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板