创建像这样设置变量obj.x
的回调函数:
def f(button, callback):
pass
def callback1():
obj.x = 1
def callback2():
obj.x = 2
class Obj:
pass
obj = Obj()
f('abc', callback2)
f('def', callback1)
是多余的,可以替换为:
def xsetter(value):
obj.x = value
f('abc', lambda: xsetter(1))
f('def', lambda: xsetter(2))
问题:是否有更简单的方法,而不必为x
定义setter?是否可能类似于以下内容?
f('abc', lambda: obj.x = 1)
f('def', lambda: obj.x = 2)
这里会产生错误:
SyntaxError:lambda无法包含分配
attribute,由setattr
函数处理。
f('abc', lambda: setattr(obj, 'x', 1))
您还可以使用functools.partial
“部分”将对象的__setattr__
方法应用于所需的参数。from functools import partial
f('abc', partial(obj.__setattr__, 'x', 1))