Python默认/可选变量

时间:2012-05-21 23:28:40

标签: python dictionary overloading

我试图在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中正确地重载构造函数。

1 个答案:

答案 0 :(得分:4)

字典是一个可变对象。在Python中,在创建函数时会解析默认值,这意味着为每个新对象分配了相同的空字典。

要解决此问题,只需执行以下操作:

class ScoredList():
    def __init__(self, dct=None):
        self.dct = dct if dct is not None else {}