定义字典的键/值对和用python定义字典有什么区别?

2024-04-25 21:17:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个类中有这两个函数

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()有什么不对?你知道吗


Tags: 对象key函数selfobjectvaluemydef
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

希望这有帮助!你知道吗

您需要将myu 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   

相关问题 更多 >