我创建了一个类:
class A:
aList = []现在我有了实例化这个类并将项添加到aList中的函数。
注:有2项
for item in items:
a = A();
a.aList.append(item);我发现第一个A和第二个A对象的aList中有相同数量的项。我期望第一个A对象在它的列表中有第一个项目,第二个A对象在它的aList中有第二个项目。
有人能解释一下这是怎么发生的吗?
PS:
我设法通过在构造函数中移动aList来解决这个问题:
def __init__(self):
self.aList = [];但是我仍然对这种行为感到好奇。
发布于 2010-05-03 17:36:28
您已经将该列表定义为一个类属性。
类属性由类的所有实例共享。当您在__init__中将列表定义为self.aList时,该列表就是您的实例(self)的一个属性,然后一切就会按您所期望的那样工作。
发布于 2010-05-03 17:36:09
您混淆了类变量和对象变量。
如果您需要对象:
class A(object):
def __init__(self):
self.aList = []在您的示例中,静态是一个类变量,您可以将其与在其他语言中使用‘aList’关键字进行比较。当然,类变量在所有实例之间是共享的。
发布于 2011-09-22 09:25:14
这是因为list是一个可变对象,它只在定义类时创建一次,这就是为什么当您创建两个实例时它变得共享的原因。例如,
class A:
a = 0 #immutable
b = [0] #mutable
a = A()
a.a = 1
a.b[0] = 1
b = A()
print b.a #print 0
print b.b[0] #print 1, affected by object "a"因此,为了解决这个问题,我们可以像你提到的那样使用构造函数。当我们将列表放入构造函数时,每当对象被实例化时,新的列表也会被创建。
https://stackoverflow.com/questions/2757116
复制相似问题