如何在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 循环中)?