如何在Python中的for循环内创建对象列表而不继承属性值[重复]

Posted

技术标签:

【中文标题】如何在Python中的for循环内创建对象列表而不继承属性值[重复]【英文标题】:How to create a list of objects inside a for loop in Python without inherit attribute values [duplicate] 【发布时间】:2019-11-12 15:21:37 【问题描述】:

下面的代码创建了一个对象列表,其中包含一个作为属性的列表和一个将项目附加到该列表的方法,但是这个附加没有像我预期的那样工作。

我的预期: 每个对象MyObj 内部的每个列表MyList 只有3 个元素。

工作原理:MyObj[0] 内的列表 MyList 有 3 个元素MyObj[1] 内的列表 MyList 有 6 个元素MyObj[2] 内部的列表 MyList 有 9 个元素

在我看来,对象MyObj[i] 附加了前一个对象MyObj[i-1]MyList。代码应该如何使每个 MyObj[i] 的每个列表 MyList 仅具有通过方法 add_to_list 插入的 3 个元素?

Python 代码:

class MyClass:
    MyList = []

    def add_to_list(self):

        for item in range(3):
            self.MyList.append("Item " + str(item))


MyObj = []

for i in range(3):
    MyObj.append(MyClass())
    MyObj[i].add_to_list()

    print("Object " + str(i))
    print(MyObj[i].MyList)

【问题讨论】:

您可以像这样在类的 init 函数中定义 MyList,class MyClass: def __init__(self): self.MyList = [] 您的主要问题是您正在使用类变量 MyList,它在同一类的所有对象之间共享,这就是它的原因保留以前的值。在 init 函数中定义它并正确初始化它可以确保它对于每个对象都是唯一的。您的问题已标记为重复,因此我无法详细发布答案。但我希望我的评论对你有所帮助。 谢谢@Saeed。这就是我的解决方案 不客气。乐于助人:) 【参考方案1】:

还需要添加一行MyObj[i].MyList.clear()

MyObj = []

for i in range(3):
    MyObj.append(MyClass())
    MyObj[i].add_to_list()

    print("Object " + str(i))
    print(MyObj[i].MyList)
    MyObj[i].MyList.clear()

输出:

Object 0
['Item 0', 'Item 1', 'Item 2']
Object 1
['Item 0', 'Item 1', 'Item 2']
Object 2
['Item 0', 'Item 1', 'Item 2']

【讨论】:

以上是关于如何在Python中的for循环内创建对象列表而不继承属性值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 lambda 列表(在列表理解/for 循环中)?

关于Python中的列表理解及用法

For循环将列表的所有元素放入不同的文本文件中,而不是在python中遍历每个元素

python中的for i in range怎么用

python中的for i in range怎么用

在 Python 中的 For 循环内连接并附加到 DataFrame