如何防止将变量重新分配给相同 class 的对象以保留以前的数据?

How to prevent reassignment of variable to object of same class from keeping previous data?

当用 Box 的新实例重新分配框时,而不是 self.things 被分配一个空字典,它包含来自前一个实例的相同数据。

我正在使用 python 3.7.3

import random

class Box:
    def __init__(self, things = {}):
        self.things = things

    def __str__(self):
        return str(self.things)

    def put_thing_in_location(self, thing, location):
        self.things[location] = thing


for i in range(2):
    box = Box()
    print(box)
    box.put_thing_in_location(
        random.randrange(10000), 
        random.randrange(10000)
    )

输出:

$ python bugTest.py

{}

{652: 8968}

我希望 Box 的新实例的 things 是一个空字典,如果没有参数传递给它的话。 相反,它保留 things 来自 Box.

的先前实例

问题是您将与默认字典完全相同的字典分配给您的实例,因此 在所有实例中共享它。将构造函数更改为

def __init__(self, things=None):
    self.things = {} if things is None else things

这确保每个实例在没有给出任何内容的情况下都将新字典作为默认值。

当你定义函数 def __init__(self, things = {}): 时,things 被初始化为一个空的字典,每当 __init__ 被调用时,同一个字典(当你调用它时它可能不是空的第二次)将被传递,当你没有明确指定 things

的值时
def __init__(self, things = None):
     things = things or {}
     ...