重用Python对象向对象列表添加不同的数据

2024-09-29 17:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这里是这样的:我创建了一个自定义类,当我逐行遍历文件的内容时,我创建了一个在列数据中存储多个字段的自定义类。我希望每次重用一个对象,一次一个地将项添加到它的字段中,然后在运行将所有字段重置为空字符串的方法之前将此对象添加到列表中。我将向您展示我的代码的简化版本。在

class MyClass:
    firstName = ""
    middleName = ""
    lastName = ""
    def clearAllFields(self):
        self.firstName = ""
        self.middleName = ""
        self.lastName = ""

myClassImpl = MyClass()
nameData = []
for current in open('nameList.csv','r'):
    current = current.split(',')
    myClassImpl.firstName = current[0]
    myClassImpl.middleName = current[1]
    myClassImpl.laststName = current[2]
    nameData.append(myClassImpl)
    myClassImpl.clearAllFields()
for item in nameData:
    print item.firstName

问题是,这个代码的输出是列表中最后一个人的名字,对于文件中的每一行重复一次。我做错什么了?在


Tags: 文件对象代码inself列表formyclass
1条回答
网友
1楼 · 发布于 2024-09-29 17:18:16

您不能重复使用这样的实例;您正在一次又一次地修改同一对象。nameData.append(myClassImpl)向列表添加一个引用,而不是一个副本。最后,您有一个引用列表,所有引用都指向同一个副本,它只会显示您最后所做的更改。在

而是为每行创建一个新实例:

class MyClass:
    def __init__(self, first, middle, last):
        self.firstName = first
        self.middleName = middle
        self.lastName = last

for current in open('nameList.csv','r'):
    current = current.split(',')
    myClassImple = MyClass(*current)
    nameData.append(myClassImpl)

或者使用^{} class。在

更好的方法是使用^{} module读取CSV数据,而不是自己解析它:

^{pr2}$

相关问题 更多 >

    热门问题