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我不知道为什么list会在循环中更新,而int似乎保持静态
发布于 2012-10-25 22:37:37
你对它们做的是完全不同的操作。请注意,在执行self.ai = self.ai + 1时,将新的整数赋给self.ai。在处理列表时,可以使用append就地处理它。还要注意,因为您使用的是int (它是不可变的),所以不能原地更改它的值。
还有证据表明,您在这里探索的是类变量与实例变量。请注意,在您的示例中,ablist和bblist是实例变量,而aalist是类变量。您可以在一个方法(self.XXlist)中以相同的方式访问它们,但是当您更改self.aalist时,您将更改类上的版本。换句话说,self.aalist is A.aalist将返回True。这允许您的类的所有实例共享相同的列表。当更新列表时,所有其他实例将立即知道(除非它们绑定具有相同名称的实例级属性--该变量将在属性查找中优先)。
https://stackoverflow.com/questions/13070948
复制相似问题