我正在处理小部件和信号,我想将信号绑定到某个回调.因为我真的不需要在感兴趣的情况下创建一个命名回调函数,所以我将它定义为lambda函数.但是,它与其他类集成的方式最好用以下最小的工作示例来描述:
class Foo():
def parse(self, what):
self.bar = what
foo = lambda x = Foo(): (x.parse("All set"), x)[-1]
print(foo().bar)
'All set'
Run Code Online (Sandbox Code Playgroud)
lambda函数需要实例化一个类,调用其成员之一来解析字符串并更改其内部状态,并返回实例化的类.目前我能想到的唯一方法就是如上例所示:将实例作为默认参数传递,创建一个列表,其中第一个元素是对方法的调用,第二个元素是实例本身,然后选择最后一个元素.
有更多的pythonic和优雅的方式获得相同的结果?
编辑:一些警告:在实际的代码中,类Foo在其他模块中定义,我将lambda作为参数传递给另一个函数,因此我不需要为回调命名.实际上,我实际拥有的东西看起来像
widget.bind( 'some_signal', lambda t, x = Foo(): (x.parse(t), x)[-1] )
Run Code Online (Sandbox Code Playgroud)