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

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(使用前将#替换为@)

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

  • 从 SHAP 值中获取特征重要性

    我想要获得重要功能的数据框 通过下面的代码 我得到了 shap values 但我不确定这些值的含义是什么 在我的 df 中有 142 个特征和 67 个实验 但得到了一个带有 ca 的数组 2500 个值 explainer shap T
  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • numpy python 中的“AttributeError:'matrix'对象没有属性'strftime'”错误

    我有一个维度为 72000 1 的矩阵 该矩阵涉及时间戳 我想使用 strftime 如下所示 strftime d m y 为了得到像这样的输出 11 03 02 我有这样一个矩阵 M np matrix timestamps 我使用了
  • ctypes 错误:libdc1394 错误:无法初始化 libdc1394

    我正在尝试将程序编译为共享库 我可以使用 ctypes 在 Python 代码中使用该库 使用以下命令该库可以正常编译 g shared Wl soname mylib O3 o mylib so fPIC files pkg config
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • PyTorch 给出 cuda 运行时错误

    我对我的代码做了一些小小的修改 以便它不使用 DataParallel and DistributedDataParallel 代码如下 import argparse import os import shutil import time
  • 将二维数组放入 Pandas 系列中

    我有一个 2D Numpy 数组 我想将其放入 pandas 系列 而不是 DataFrame 中 gt gt gt import pandas as pd gt gt gt import numpy as np gt gt gt a np
  • 将 numpy 代码点数组与字符串相互转换

    我有一个很长的 unicode 字符串 alphabet range 0x0FFF mystr join chr random choice alphabet for in range 100 mystr re sub W mystr 我想
  • 编辑 Jupyter Notebook 时 VS Code 中缺少“在选择中查找”

    使用 Jupyter Notebook 时 VSCode 中缺少 在选择中查找 按钮 它会减慢开发速度 所以我想请问有人知道如何激活它吗 第一张图显示了在 python 文件中的搜索 替换 第二张图显示了笔记本电脑中缺少的按钮 Python
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • Python问题:打开和关闭文件返回语法错误

    大家好 我发现了这个有用的 python 脚本 它允许我从网站获取一些天气数据 我将创建一个文件和其中的数据集 有些东西不起作用 它返回此错误 File
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo

随机推荐

  • 如何在 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