class A(object):
aalist = []
ai = 0
def __init__(self):
self.ablist = list()
def add(self):
self.aalist.append(["a","a"])
self.ablist.append(["b","b"])
self.ai = self.ai + 1
class B(A):
def __init__(self):
A.__init__(self)
self.bblist = list()
def badd(self):
self.bblist.append(['c','c'])
for i in range(1,4):
c = B()
c.add()
c.badd()
print c.aalist,c.ablist,c.bblist,c.ai
运行这些代码,结果提示:
[['a', 'a']] [['b', 'b']] [['c', 'c']] 1
[['a', 'a'], ['a', 'a']] [['b', 'b']] [['c', 'c']] 1
[['a', 'a'], ['a', 'a'], ['a', 'a']] [['b', 'b']] [['c', 'c']] 1
我不知道为什么列表在循环中得到更新,而int似乎保持静态
答案 0 :(得分:2)
你正在与他们进行完全不同的操作。请注意,当您执行self.ai
时,将新整数分配给self.ai = self.ai + 1
。使用列表时,可以使用append
对其进行处理。另请注意,由于您使用的是int
(不可变),因此无法更改其值。
还有证据表明您正在探索类变量与实例变量。请注意,在您的示例中,ablist
和bblist
是实例变量,而aalist
是类变量。您可以在方法(self.XXlist
)中以相同的方式访问它们,但是当您变异self.aalist
时,您将改变类上的版本。换句话说,self.aalist is A.aalist
将返回True
。这允许您的类的所有实例共享相同的列表。当一个人更新列表时,所有其他实例将立即知道(除非他们绑定具有相同名称的实例级别属性 - 该变量将在属性查找中优先。)