Python:获取对象的实例(通过for循环..?)
我想使用字典访问我的用户类的所有实例。Python:获取对象的实例(通过for循环..?),python,class,instance,Python,Class,Instance,我想使用字典访问我的用户类的所有实例。 我用save\u dat作为字典来初始化(正确的单词?)这样的实例 for a in save_dat: a = user(a,save_dat[a]) a.some_method 那很好。 但是,稍后我想再次访问这些实例。我的想法是: for a in save_dat: a.some_method 不起作用,错误:“str”对象没有属性“name” 但是我已经在save_datuser instances 我不能再做a=us
我用
save\u dat
作为字典来初始化(正确的单词?)这样的实例
for a in save_dat:
a = user(a,save_dat[a])
a.some_method
那很好。但是,稍后我想再次访问这些实例。我的想法是:
for a in save_dat:
a.some_method
不起作用,错误:“str”对象没有属性“name”
但是我已经在save_dat
user instances我不能再做
a=user(a,save_dat[a])
,因为这会覆盖其中一些实例(我认为…)的更改属性,它们应该已经是用户实例了 试试这个(假设user
是返回实例的函数,或者是以小写字母开头的类名):
后来:
for a in users.values():
a.some_method ()
如果确实要更新词典而不是创建新词典用户
,请尝试以下操作:
save_dat = {key: user(key, value) for key, value in save_dat.items() }
然后:
for a in save_dat.values():
a.some_method ()
我能理解的是,使用
a=user(a,save_-dat[a])
您试图将实例保存在save_-dat
字典中
但是做a=user(a,save_dat[a])
并不能按照您的意愿工作。
例如:
some_dict = { 1: 3, 2: 4}
for i in some_dict:
i = 5
这不会将字典更改为{1:5,2:5}
,相反,字典根本不会更改
要更改词典,我们必须执行以下操作:
some_dict = { 1: 3, 2:4}
for i in some_dict:
some_dict[i] = 5
所以,你应该做的是:
for a in save_dat:
save_dat[a] = user(a,save_dat[a])
save_dat[a].some_method
对真管用!谢谢但是为什么我的代码不起作用,是什么让代码起作用的关键思想呢?决定性的区别在哪里?区别在于您的代码中没有将
user()
的结果存储在任何地方。将其分配给局部变量a
,并在每次迭代中覆盖它,一旦循环完成,它就不再存在。然后在第二个循环中,您再次迭代原始字典,就好像您从未调用过user()
。
for a in save_dat:
save_dat[a] = user(a,save_dat[a])
save_dat[a].some_method