如何防止将变量重新分配给相同 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 {}
...
当用 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 {}
...