在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式的方法来将一个未绑定的方法绑定到一个实例,并继续传递它而不调用它呢?
发布于 2009-06-18 21:50:36
这可以用types.MethodType干净利落地完成。示例:
import types
def f(self):
print(self)
class C:
pass
meth = types.MethodType(f, C(), C) # Bind f to an instance of C
print(meth) # prints <bound method C.f of <__main__.C object at 0x01255E90>>
发布于 2011-09-06 03:31:04
在其中创建一个包含self的闭包在技术上不会绑定函数,但它是解决相同(或非常相似)底层问题的另一种方法。下面是一个简单的例子:
self.method = (lambda self: lambda args: self.do(args))(self)
发布于 2009-06-18 21:41:14
这将把self
绑定到handler
bound_handler = lambda *args, **kwargs: handler(self, *args, **kwargs)
这是通过将self
作为第一个参数传递给函数来实现的。object.function()
只是function(object)
的语法糖。
https://stackoverflow.com/questions/1015307
复制相似问题