Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类不创建新的实例变量_Python_Python 3.x_Initialization_Static Methods - Fatal编程技术网

Python 类不创建新的实例变量

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 #

我有以下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  # 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 = {}