创建类的新对象的Python包含旧对象的值

时间:2015-05-21 07:23:19

标签: python arrays list python-2.7 oop

我有一个带有list-variable的类和一个将项添加到此列表的函数。我不能直接追加项目,因为我必须验证它们:

class Foo:
    def __init__(self, elements=[]):
        self.elements = elements

    def append(self, element):
        self.elements.append(element)

如果我实例化此类的对象,添加项目然后再创建另一个新对象,则此对象包含第一个对象的项目。

foo = Foo()
print foo.elements  # []
foo.append(element=4)
print foo.elements  # [4]
foo.append(element=7)
print foo.elements  # [4, 7]
bar = Foo()
print bar.elements  # [4, 7]

有人能解释一下,为什么会这样?

对我来说可能的解决方案可能就是这样,但我不喜欢它......

class Foo:
    def __init__(self, elements=None):
        if elements is None:
            self.elements = []
        else:
            self.elements = elements

    def append(self, element):
        self.elements.append(element)

感谢所有答案!

1 个答案:

答案 0 :(得分:1)

你已经自己得到了答案。使用可变对象进行初始化绝不是一个好主意。它将被初始化一旦该类被定义并重用于每个实例。