Python在循环中初始化对象

时间:2014-10-21 09:47:13

标签: python class object for-loop

这里发生了什么? 我原以为b=a()会创建一个类的空实例。

class a:
    def __init__(self,l=[]):
        self.l=l

for i in range(2):
    b=a()
    b.l.append(1)
    print b.l

结果:

[1]
[1, 1]

3 个答案:

答案 0 :(得分:2)

当您将列表作为默认参数时,只创建一个新列表,当定义该函数时,每次调用都会使用相同的列表。要解决问题"你可以这样做:

class a:
    def __init__(self,l=None):
        if l is None:
            self.l = []
        ...

答案 1 :(得分:0)

你可以在这里阅读一个很好的解释:http://effbot.org/zone/default-values.htm

>>> def function(data=[]):
...     data.append(1)
...     return data
...
>>> function()
[1]
>>> function()
[1, 1]
>>> function()
[1, 1, 1]

在你的情况下正确的方法:

class a:
    def __init__(self, l=None):
        if l is None:
            l = []
        self.l=l

for i in range(2):
    b=a()
    b.l.append(1)
    print b.l

答案 2 :(得分:0)

当您在函数参数列表中执行 l = [] 时 - 您声明静态列表(列表对象将只创建一次),因此每次添加新元素时相同的列表对象

您可能需要这样的东西来为每个新的A对象创建新的列表对象:

class A:
    def __init__(self, l=None):
        self.l = l or []

for i in range(2):
    b=A()
    b.l.append(1)
    print b.l