我在一个类中有这两个函数
Class A(object):
my_dict{"a":1, "b":2, "c":3}
def set_dict(self,key,value):
self.my_dict[key] = value
def set_dict2(self,dict):
self.my_dict= dict
然后我创建一个类对象
obj1 = A()
obj1.set_dict("a",4)
obj1.set_dict("b",5)
obj1.set_dict("c",6)
obj2 = A()
obj2.set_dict("a",7)
obj2.set_dict("b",8)
obj2.set_dict("c",9)
如果我执行上述操作,则obj1和obj2都具有{a:7,b:8,c:9},因为obj1也会因对obj2的最新更改而更改。但如果这样做,它的工作正常:
obj1 = A()
obj1.set_dict2({"a":4, "b":5, "c":6})
obj2 = B()
obj2.set_dict2({"a":7, "b":8, "c":9})
所以问题是set_dict()
做错了什么?
答案 0 :(得分:2)
那是因为my_dict
是一个类变量。当你说my_dict[key] = value
时,你正在修改类中的字典,而不是修改变量。
为了更清楚,让我们看一下这个控制台会话:
>>> a = A()
>>> a.set_dict('a', 7)
>>> A.my_dict
{'a': 7, 'c': 3, 'b': 2}
>>> n = A()
>>> n.set_dict('a', 10)
>>> A.my_dict
{'a': 10, 'c': 3, 'b': 2}
因此,您正在更改A.my_dict
而不是a.my_dict
。要解决此问题,您需要将其设为实例变量:
class A(object):
def __init__(self):
self.my_dict = {"a":1, "b":2, "c":3}
def set_dict(self,key,value):
self.my_dict[key] = value
def set_dict2(self,dct):
self.my_dict = dct
希望这有帮助!
答案 1 :(得分:0)
你需要让my_dict成为一个实例变量,例如:
Class A(object):
def __init__(self):
self.my_dict{"a":1, "b":2, "c":3}
def set_dict(self,key,value):
self.my_dict[key] = value
def set_dict2(self,dict):
self.my_dict= dict