首页 > 解决方案 > 如何在不继承属性值的情况下在 Python 中的 for 循环内创建对象列表

问题描述

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

我所期望的:每个对象内部的
每个列表只有 3 个元素。 MyListMyObj

它是如何工作的:里面的
列表有 3 个元素里面 的列表有 6 个元素里面 的列表有 9 个元素MyListMyObj[0]
MyListMyObj[1]
MyListMyObj[2]

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

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)

标签: pythonooparraylist

解决方案


您还需要添加一行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']

推荐阅读