我有一个带有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)
感谢所有答案!
答案 0 :(得分:1)
你已经自己得到了答案。使用可变对象进行初始化绝不是一个好主意。它将被初始化一旦该类被定义并重用于每个实例。