def dict2bean(obj, dic): for k, v in dic.items(): if hasattr(obj, k): obj.k = v #这里无法修改类中a,d的值,使用setattr(obj,k,v)就可以 class obj(): d=1 def __init__(self,a): self.a=a dic={'a':3,'d':88} x=obj(12) dict2bean(x, dic) print(x.a) print(x.d)
为什么obj.k=v 不会修改类obj中a,d的值,而使用setattr(obj,k,v)就可以用字典的键值替换掉obj中变量的值
当使用obj.k=v 时,x.a=12,x.d=1
当使用setattr(obj,k,v)时,x.a=3,x.d=88
obj.k = v
这个语句的意思是将obj对象的k属性设为v,并不是你想的
obj.a = v
或
obj.d = v
请教为什么这句会判定为TRUE呢?
if hasattr(obj, k):
因为你这里相当于指针引用, 不能直接操作. 你可以查看一下内存地址对比一下
x实例里有属性a和d,k变量就是a或b
哈希比较的是字符串的值,k指向的是字符串,明确写obj.name的意思是指向的是实例属性,obj.k !=转换成 obj.name而是新增一个k属性
Sign in to make a reply
久处不厌
为什么obj.k=v 不会修改类obj中a,d的值,而使用setattr(obj,k,v)就可以用字典的键值替换掉obj中变量的值
当使用obj.k=v 时,x.a=12,x.d=1
当使用setattr(obj,k,v)时,x.a=3,x.d=88