【发布时间】:2018-07-21 22:28:38
【问题描述】:
我有以下 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 = {}
有人可以帮我理解这里发生了什么吗?
【问题讨论】:
标签: python python-3.x initialization static-methods