我已经阅读了以下StackOverflow问题,我的情况类似,但(我认为)不同:
我的班级创建了一个实例级字典对象。但是,我的构造函数为该对象提供了默认值。当我尝试使用默认值创建类的实例时,它的行为突然就像是类级别的。
class store_a_dict:
def __init__(self,dict_in={"A":0}):
self.dict = dict_in
def increment(self):
self.dict["A"] += 1
def print_me(self):
print(self.dict)
test1 = store_a_dict({"A":3})
print("Initialised test1. Now test1 contains:")
test1.print_me()
test2 = store_a_dict()
print("Initialised test2 using default input. Now test2 contains:")
test2.print_me()
test2.increment()
print("Incremented test2. Now test2 contains:")
test2.print_me()
test3 = store_a_dict()
print("Initialised test3 using default input. Now test3 contains:")
test3.print_me()
print("We haven't touched test1, and it still contains:")
test1.print_me()
代码输出如下。我期望test3
在使用{'A': 0}
且没有输入的情况下初始化后应该包含store_a_dict()
。
Initialised test1. Now test1 contains:
{'A': 3}
Initialised test2 using default input. Now test2 contains:
{'A': 0}
Incremented test2. Now test2 contains:
{'A': 1}
Initialised test3 using default input. Now test3 contains:
{'A': 1}
We haven't touched test1, and it still contains:
{'A': 3}
看来,最明显的解决方法是将代码的第3行更改为self.dict = dict_in.copy()
,但我想了解为什么这样做会如此。当在调用类的过程中提供一个dict_in
的值并将其与实例隔离时,为什么为BottomNavigationView
取一个值感到非常高兴,但是当我尝试使用默认值时,突然出现成为类级别的对象?请帮助我更深入地了解这一点,以便避免类似的错误。