在 Python 中创建对象列表

新手上路,请多包涵

我正在尝试创建一个 Python 脚本来打开多个数据库并比较它们的内容。在创建该脚本的过程中,我在创建一个列表时遇到了问题,该列表的内容是我创建的对象。

为了这篇文章,我已将程序简化为最基本的结构。首先,我创建一个新类,创建它的一个新实例,为其分配一个属性,然后将其写入列表。然后我为实例分配一个新值并再次将其写入列表……一次又一次……

问题是,它始终是同一个对象,所以我实际上只是在更改基础对象。当我阅读列表时,我一遍又一遍地重复同一个对象。

那么如何在循环中将对象写入列表呢?

这是我的简化代码

class SimpleClass(object):
    pass

x = SimpleClass
# Then create an empty list
simpleList = []
#Then loop through from 0 to 3 adding an attribute to the instance 'x' of SimpleClass
for count in range(0,4):
    # each iteration creates a slightly different attribute value, and then prints it to
# prove that step is working
# but the problem is, I'm always updating a reference to 'x' and what I want to add to
# simplelist is a new instance of x that contains the updated attribute

x.attr1= '*Bob* '* count
print "Loop Count: %s Attribute Value %s" % (count, x.attr1)
simpleList.append(x)

print '-'*20
# And here I print out each instance of the object stored in the list 'simpleList'
# and the problem surfaces.  Every element of 'simpleList' contains the same      attribute value

y = SimpleClass
print "Reading the attributes from the objects in the list"
for count in range(0,4):
    y = simpleList[count]
    print y.attr1

那么我如何(附加、扩展、复制或其他)simpleList 的元素,以便每个条目包含对象的不同实例,而不是全部指向同一个?

原文由 [](https://stackoverflow.com/questions/348196/creating-a-list-of-objects-in-python) 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 251
1 个回答

你表现出根本性的误解。

您根本没有创建 SimpleClass 的实例,因为您没有调用它。

 for count in xrange(4):
    x = SimpleClass()
    x.attr = count
    simplelist.append(x)

或者,如果让类接受参数,则可以使用列表理解。

 simplelist = [SimpleClass(count) for count in xrange(4)]

原文由 ironfroggy 发布,翻译遵循 CC BY-SA 2.5 许可协议

推荐问题