我试图在python中围绕字典对象编写一个包装器对象,如此
class ScoredList():
def __init__(self,dct={}):
self.dct = dct
list = ScoredList()
list.dct.update({1,2})
list2 = ScoredList()
list.dct.update({"hello","world"})
print list1.dct, list2.dct # they are the same but should not be!
似乎我无法创建新的ScoredList对象,或者更确切地说,每个得分列表对象共享相同的基础字典。这是为什么?
class ScoredList2():
def __init__(self):
self.dct = {}
上面的ScoredList2代码工作正常。但我想知道如何在python中正确地重载构造函数。
答案 0 :(得分:4)
字典是一个可变对象。在Python中,在创建函数时会解析默认值,这意味着为每个新对象分配了相同的空字典。
要解决此问题,只需执行以下操作:
class ScoredList():
def __init__(self, dct=None):
self.dct = dct if dct is not None else {}