我有以下Python(3.6.0)类:
class SampleClass(object):
@staticmethod
def create(*data):
sample_instance = SampleClass()
sample_instance.add_data(*data)
return sample_instance
def __init__(self, data_map={}):
super(SampleClass, self).__init__()
self.data_map = data_map
def add_data(self, *data):
for key, value in data:
self.data_map.setdefault(key, []).append(value)
静态方法create
是初始化新实例的便捷方法。但是,当多次调用create
时,不会重新创建data_map
属性。例如:
sample_instance1 = SampleClass.create(('a', 1), ('b', 2), ('c', 3))
sample_instance2 = SampleClass.create()
sample_instance1.data_map == sample_instance2.data_map # True
sample_instance1.data_map is sample_instance2.data_map # True
如果我将__init__
方法更改为此,问题就消失了:
def __init__(self):
super(SampleClass, self).__init__()
self.data_map = {}
有人可以帮助我了解这里发生的事情吗?
答案 0 :(得分:1)
默认参数data_map={}
仅在定义函数时创建一次。如果您进行了更改,则更改将在以后的调用中保留。这意味着SampleClass
的每个未获得新字典的实例都有一个self.data_map
指向同一(默认)字典实例。