首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类中更新的列表

在类中更新的列表
EN

Stack Overflow用户
提问于 2012-10-25 22:35:08
回答 1查看 73关注 0票数 0
代码语言:javascript
复制
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

运行这些代码,结果会提示:

代码语言:javascript
复制
[['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似乎保持静态

EN

回答 1

Stack Overflow用户

发布于 2012-10-25 22:37:37

你对它们做的是完全不同的操作。请注意,在执行self.ai = self.ai + 1时,将新的整数赋给self.ai。在处理列表时,可以使用append就地处理它。还要注意,因为您使用的是int (它是不可变的),所以不能原地更改它的值。

还有证据表明,您在这里探索的是类变量与实例变量。请注意,在您的示例中,ablistbblist是实例变量,而aalist是类变量。您可以在一个方法(self.XXlist)中以相同的方式访问它们,但是当您更改self.aalist时,您将更改类上的版本。换句话说,self.aalist is A.aalist将返回True。这允许您的类的所有实例共享相同的列表。当更新列表时,所有其他实例将立即知道(除非它们绑定具有相同名称的实例级属性--该变量将在属性查找中优先)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13070948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档