首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python类数据初始化

Python类数据初始化
EN

Stack Overflow用户
提问于 2021-11-29 04:33:30
回答 2查看 58关注 0票数 1

我有一个这样的课程

代码语言:javascript
复制
class Tree:
    # class attributes:
    a = []
    b = None

    def __init__(self, b, a_list):
        self.b = b
        if a_list is not None:
             initialize_a_list(a_list)
   
    def initialize_a_list(self, a_list):
        self.a.append(a_list)

当我打这个电话的时候tree = Tree(b, None)。我的树对象的a属性不是用一个空列表初始化的,而是用一个随机的非空列表初始化的。在此之前,我已经创建了一些类型为Trees的其他对象,并且我注意到treea中的一些元素具有与先前创建的那些对象的a相同的元素。

我将__init__函数中的a = []添加到代码中以解决此问题,但我想知道为什么会出现这种情况。为什么a是用这样的可能不是那么随机但不是空的列表来初始化的。

EN

回答 2

Stack Overflow用户

发布于 2021-11-29 04:43:54

实例变量不应该像这样声明:

代码语言:javascript
复制
class Tree:
    # class attributes:
    a = []
    b = None

将这些代码行移到__init__构造函数方法中,它就可以工作了。

票数 0
EN

Stack Overflow用户

发布于 2021-11-29 07:29:33

在此之前,我已经创建了

类型的其他对象,并且我注意到树的a中的一些元素具有与先前创建的那些对象的a相同的元素。

这是因为您已将a变量声明为类变量。这意味着它由类的所有实例以及类本身共享。

__init__方法中初始化a变量会使其成为实例变量,这意味着它由类的每个实例单独拥有(每个实例分配一个单独的数据结构并由每个实例处理)。

最后,值得注意的是,a确实被初始化为一个空列表,只是其他Tree实例写入了该共享列表,导致它看起来像是保存了随机数据。

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

https://stackoverflow.com/questions/70149776

复制
相关文章

相似问题

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