我正在编写一个python脚本,将各种文件中的数据收集到具有许多属性的对象中。 这些属性基本上都可以是“ok”、“bad”或“N/A”。其中的属性是“N/A”,根据我调用脚本的参数而改变。你知道吗
我要做的是初始化所有这些属性默认设置为“ok”的对象,然后将那些尚未测量的属性设置为“N/A”(由返回N/A属性列表的函数检查)。 (然后我从文件中收集数据,将“bad”属性设置为“bad”。)
我以为我可以通过字典来实现,但它似乎无法工作/访问属性?你知道吗
class Myclass:
def __init__(self, ID):
self.ID = ID
self.at1 = "ok"
self.at2 = "ok"
self.at3 = "ok"
self.at4 = "ok"
# there are a LOT more of these attributes
def foo(unused):
for i in range(3):
blurb = Myclass(i)
unused_dic = {"at1":blurb.at1, "at2":blurb.at2,
"at3":blurb.at3, "at4":blurb.at4}
for key in unused:
unused_dic[key] = "N/A"
print blurb.ID, blurb.at1, blurb.at2, blurb.at3, blurb.at4
unused = ["at1","at3"] # this is returned by another function
foo(unused)
其输出为:
0 ok ok ok ok
1 ok ok ok ok
2 ok ok ok ok
但我希望:
0 N/A ok N/A ok
1 N/A ok N/A ok
2 N/A ok N/A ok
我做错了什么,怎么才能做对呢?你知道吗
我尝试采用更面向对象的样式;
setattr
函数正是您所需要的:您不会更改实例上的属性,只会更改字典本身中的属性。python中的变量不是指针;在一个地方更改字符串不会使更改在其他地方可见。你知道吗
可以使用
setattr()
动态更改实例上的属性:但是您必须将
blurb
实例存储在某个地方,可以说上面的代码只是“丢了球”。你知道吗您没有修改
blurb
对象。您正在修改来自unused_dict
的值。你知道吗您需要将循环更改为:
相关问题 更多 >
编程相关推荐