我正在嘗試在運行時為一個類創建屬性,我目前正在使用這段代碼: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
提交
取消