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