0

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

4

1 回答 1

4

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

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

class ScoredList():
    def __init__(self, dct=None):
        self.dct = dct if dct is not None else {}
于 2012-05-21T23:30:03.757 回答