我正在尝试在运行时为一个类创建属性,我目前正在使用这段代码:class Obj: passattrs = ["a", "b", "c"]for attr in attrs: attr_print = lambda self: print(attr) setattr(Obj, attr, property(attr_print))o = Obj()o.a但是无论我尝试打印什么属性,它总是打印最后一个 in attrs。感觉 python 在每个循环中都在更改我以前的 lambda。有没有办法防止这种情况发生?
1 回答

冉冉说
TA贡献1877条经验 获得超1个赞
是的,只需使用另一个 lambda ...
for attr in attrs:
createProp = lambda a: (lambda self: print(a))
attr_print = createProp(attr)
setattr(Obj, attr, property(attr_print))
这样,我们a在每个循环中创建一个新变量(这a是函数的参数/局部变量createProp),attr_print然后每个 s 都引用自己的私有as。
添加回答
举报
0/150
提交
取消