在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)
问题是,因为所有的值handle
r都是未绑定方法,所以我的程序爆炸得很厉害,我哭了。
我正在网上寻找解决方案,该方案应该是一个相对直接,可解决的问题。不幸的是我找不到任何东西。现在,我正在functools.partial
解决此问题,但是没有人知道是否存在一种干净,健康,Pythonic的方式将未绑定的方法绑定到实例并继续传递它而不调用它吗?
所有函数也是描述符,因此你可以通过调用它们的__get__
方法来绑定它们:
bound_handler = handler.__get__(self, MyWidget)
这是R. Hettinger 关于描述符的出色指南。
作为一个独立的例子,请参考Keith的 评论:
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
问题内容: 以下类方法有什么区别? 是一个是静态的,另一个不是静态的吗? 问题答案: 在Python,有区别绑定和未绑定的方法。 基本上,是调用成员函数(如),绑定函数 被翻译成 即对未绑定方法的调用。因此,呼叫你的版本method_two将失败,并显示TypeError 你可以使用装饰器更改方法的行为 装饰器告诉内置默认元类type(一个类的类,请参见此问题)不为创建绑定方法method_two
本文向大家介绍Python中绑定与未绑定的类方法用法分析,包括了Python中绑定与未绑定的类方法用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python中绑定与未绑定的类方法。分享给大家供大家参考,具体如下: 像函数一样,Python中的类方法也是一种对象。由于既可以通过实例也可以通过类来访问方法,所以在Python里有两种风格: 未绑定的类方法:没有self 通过类来引用方
本文向大家介绍详解python方法之绑定方法与非绑定方法,包括了详解python方法之绑定方法与非绑定方法的使用技巧和注意事项,需要的朋友参考一下 写在之前 在 Python 的类里面除了属性之外,还有方法,当然也有文档和注释这类东西,但是这个只是人来看,计算机则不关心。我们之前说过,我们一般用实例调用方法,既然我们说了是一般,那么就说明还有其他调用方法的方式,今天我们就来说一下「绑定方法和非绑定
相信 Python 程序员多多少少都和我一样遇到过 Method Unbound Error,直译过来就是 “方法未绑定错误”,虽然搜索之后知道了使用 @classmethod 这样的装饰起后就可以解决问题, 但是一直没有得到完全解惑。 我们知道,Python 是一个动态语言,在类的创建过程中甚至实例化以后都能动态地修改其方法、 属性,这种做法通常被称为“Monkey Patching”,虽然我们
本文向大家介绍Python类绑定方法及非绑定方法实例解析,包括了Python类绑定方法及非绑定方法实例解析的使用技巧和注意事项,需要的朋友参考一下 一、绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑定方法的应用。 从上面的输出结果来看,talk()這个类中的方法,是绑定给对象使用的。下面,我在
问题内容: 我之所以问这个问题,是因为对该答案的评论主题进行了讨论。我有90%的方法可以解决问题。 存在三种不同形式: 绑定方法 , 未绑定方法 和 函数 对象之间的区别是什么,所有这些都由f1描述?一个人怎么称呼这三个物体?它们如何相互转化?关于这些东西的文档很难理解。 问题答案: 一个 功能 是创建由声明,或通过。在Python 2下,当函数出现在语句主体中(或传递给类构造调用)时,它将转换为