如何绑定未绑定的方法而不调用它?

2023-12-27

在Python中,有没有一种方法可以绑定未绑定的方法而不调用它?

我正在编写一个 wxPython 程序,对于某个类,我决定将所有按钮的数据分组在一起作为类级元组列表,如下所示:

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

    def setup(self):
        for text, handler in MyWidget.buttons:
            # This following line is the problem line.
            b = wx.Button(parent, label=text).bind(wx.EVT_BUTTON, handler)

问题是,因为所有的值handler是未绑定的方法,我的程序在一场壮观的大火中爆炸,我哭了。

我在网上寻找一个似乎应该是相对简单、可解决的问题的解决方案。不幸的是我什么也没找到。现在,我正在使用functools.partial来解决这个问题,但是有谁知道是否有一种干净、健康、Pythonic 的方式将未绑定的方法绑定到实例并继续传递它而不调用它?


所有功能也都描述符,所以你可以通过调用它们来绑定它们__get__ method:

bound_handler = handler.__get__(self, MyWidget)

这是 R. Hettinger 的精彩作品guide https://docs.python.org/2/howto/descriptor.html到描述符。


作为一个独立的例子Keith's https://stackoverflow.com/users/834176/keith-pinson comment https://stackoverflow.com/questions/1015307/python-bind-an-unbound-method#comment8431145_1015405:

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何绑定未绑定的方法而不调用它? 的相关文章

随机推荐

  • 如何在 Jmeter 中设置和获取环境变量来测试 API

    我需要在 Jmeter 中设置和获取变量以实现 API 自动化 我正在使用 groovy 脚本来实现同样的目的 我使用如下代码实现了相同的效果 import org apache jmeter util JMeterUtils JMeter
  • Ajax成功:{return false;}

    我想回来false from ajax when success做完了 ajax url website url queries voorraad berekenen php type post data aantal this paren
  • Facebook 聊天 API 的替代方案

    既然 Facebook 的 Chat API chat facebook com 和 XMPP 之类的东西 已被弃用 那么它的替代品是什么 有宣布什么吗 None
  • 批量.txt阅读器

    所以 基本上我想要一个批处理文件来读取 txt 问题是每次将新行写入 txt 时 批处理文件都需要更新 echo off set pc 1 FOR F delims A IN findstr N pc DO set zeilen A typ
  • Excel 中的 Odoo 图像

    我正在使用 xlsxwriter 创建一个 excel 文件 需要将我的公司徽标放入这些 excel 文件中 我一直在尝试使用 insert image 但没有成功 我想这就像将partner image解析到缓冲区中一样 但我卡住了 请帮
  • 导航架构片段重载问题

    我在图片库中使用导航架构 当我从片段 A 到 B 然后返回到 A 时 这 3 种方法是又打来电话这将使我的画廊reload 我应该在哪里加载片段中的数据 这样当我从 B 返回到 A 时 我的方法就不会被调用 创建视图时 视图创建时 OnRe
  • 使用当前文件名和文件路径从 vim 执行 bash 命令

    我试图这样做是为了保存文件而不更改时间戳 nnoremap
  • YouTube 未显示为引荐来源网址?

    我一直在跟踪我的网站的引荐来源网址 并将其存储为一个会话 以便在他们执行某些操作时在某些报告中使用 为了获得推荐人 我只是这样做 SESSION s1 SERVER HTTP REFERER 它似乎适用于除 YouTube 之外的所有内容
  • 使用 sonarqube google 计算实例安装声纳扫描仪时出现错误“在 JAVA_HOME 或 PATH 中找不到‘java’可执行文件”

    我一直在尝试配置 sonarqube 以使用云构建触发器 并希望使用 bitnami 的 sonarqube 计算实例安装 但是当我使用本指南安装 sonar scanner 时 https docs sonarqube org lates
  • ASP.NET MVC 6 上每个控制器的特定 JSON 设置

    我需要在 ASP NET MVC 6 webApi 中为每个控制器进行特定的 JSON 设置 我发现这个示例适用于 MVC 5 我希望 在每个控制器的 ASP NET WebAPI 上强制使用 CamelCase https stackov
  • 明天前一分钟的 cron 作业

    我将按计划通过curl 触发对PHP 文件的调用 我正在考虑让脚本每隔一段时间执行一次23 59 59或者只是在明天到来之前的一分钟 有什么最好的方法吗 对 cron 设置仍然很困惑 我需要确保在第二天之前的一秒钟跑步 Minutes 0
  • 使用Google测试框架(不是Windows)进行内存泄漏检测的标准做法是什么

    我使用 Google Test 进行了大量的单元测试 目前使用 XCode 我注意到其他一些测试框架会在每个单元测试结束时检测内存泄漏 并且我认为有一种规定的方法可以使用 Google Test 执行相同的操作 我希望这不仅仅是 Boost
  • 在列表理解中使用就地列表方法的替代方法?

    我知道就地列表方法返回None而不是变异列表 据我所知 这使得不可能将这些方法用作列表理解的内部逻辑的一部分 创建一个列表推导式 其成员是通过改变其他列表而产生的 最Pythonic的方法是什么 换句话说 这条 不起作用 行的最佳替代方案是
  • Symfony:无法在带有 phpunit 的测试套件中删除分离的实体

    我实际上正在对我的 api 进行一些功能测试 但我遇到了一个我不太理解的问题 我想测试一个与远程网络托管服务器交互的 API 目标是管理虚拟主机 DNS 区域 数据库等 我有一个测试远程服务器 为了避免冲突 我在测试后删除了创建的内容 在T
  • 多个 html div 使用相同的 css 样式

    我有 2 个 div 元素 container1 container2 我可以按以下方式使用样式吗 container1 container2 h5 如果是 那么我无法让它为 container3 工作 container1 contain
  • 如何在尝试加载之前检查 jpeg 图像文件是否确实是有效图像? [复制]

    这个问题在这里已经有答案了 In C NET 4 0 基于我在下载错误图像时遇到的问题 将错误的 aspx 页面保存为 image jpg 而不是 image jpg 中的实际图像 我需要以某种方式读取文件并确定它是否是有效图像 我只需要
  • 在 pytest 中断言时忽略字典中的元素

    我想知道在 pytest 中进行断言时是否有办法忽略 dict 中的元素 我们有一个断言 它将比较包含last modified date 的列表 日期将始终更新 因此无法确保该日期与最初输入的日期相同 例如 userName bob la
  • 访问 Ubuntu GDM 登录屏幕的 X Display [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 总的来说 我试图从一个单独的 shell 将按键注入 Ubuntu 登录屏幕 我的机器 运行 Ubuntu 10 04 位于标准登录屏幕 并且我也通过
  • 如何在 JavaScript 中创建抽象基类?

    是否可以在 JavaScript 中模拟抽象基类 最优雅的方法是什么 比如说 我想做一些类似的事情 var cat new Animal cat var dog new Animal dog cat say dog say 它应该输出 me
  • 如何绑定未绑定的方法而不调用它?

    在Python中 有没有一种方法可以绑定未绑定的方法而不调用它 我正在编写一个 wxPython 程序 对于某个类 我决定将所有按钮的数据分组在一起作为类级元组列表 如下所示 class MyWidget wx Window buttons