Python初始化循环中的对象
这是怎么回事? 我本以为Python初始化循环中的对象,python,class,object,for-loop,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] 当您将list作为默认参数时,只会创建一次新的list,定义函数后,在每次调用中使用相同的list。要“解决”此问题,您可以执行以下操作: class a: def _
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]
当您将list作为默认参数时,只会创建一次新的list,定义函数后,在每次调用中使用相同的list。要“解决”此问题,您可以执行以下操作:
class a:
def __init__(self,l=None):
if l is None:
self.l = []
...
你可以在这里看到一个很好的解释: 在你的情况下,正确的方法是:
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
当您在函数参数列表中执行l=[]时,您将声明静态列表(列表对象将只创建一次),因此每次您将新元素附加到同一列表对象时 要为每个新对象创建新的列表对象,您可能需要以下内容:
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
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