Python 类不创建新的实例变量
我有以下Python(3.6.0)类: 其中,静态方法Python 类不创建新的实例变量,python,python-3.x,initialization,static-methods,Python,Python 3.x,Initialization,Static Methods,我有以下Python(3.6.0)类: 其中,静态方法create是初始化新实例的方便方法。但是,多次调用create时,不会重新创建data\u map属性。例如: sample_instance1 = SampleClass.create(('a', 1), ('b', 2), ('c', 3)) sample_instance2 = SampleClass.create() sample_instance1.data_map == sample_instance2.data_map #
create
是初始化新实例的方便方法。但是,多次调用create
时,不会重新创建data\u 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
如果我将\uuuuu init\uuuu
方法更改为此,问题就会消失:
def __init__(self):
super(SampleClass, self).__init__()
self.data_map = {}
有人能帮我理解这里发生了什么吗?在定义函数时,默认参数
data\u map={}
只创建一次。如果对其进行变异,这些更改将在以后的调用中保持不变。这意味着SampleClass
的每个实例如果没有给出新的dict,都有一个指向同一(默认)dict实例的self.data\u map
。太棒了,谢谢;什么是最好的方式来重现每一次,同时仍然在夸格?类似于\uuuu init\uuuuuuuo(self,data\u map=None)
然后self.data\u map=data\u map或{}
?@treyhakanson是的,这是一个很好的方法。此问题已标记为重复,请参阅链接问题中的答案了解其他方法。
def __init__(self):
super(SampleClass, self).__init__()
self.data_map = {}