【问题标题】:How to use elements in a list to create an object for a class如何使用列表中的元素为类创建对象
【发布时间】:2020-11-30 03:39:16
【问题描述】:

我创建了一个包含以下构造函数的类:

class Student:
    def __init__(self, student_id, student_name, student_marks):
        self.student_id = student_id
        self.student_name = student_name
        self.student_marks = student_marks

我正在访问一个包含以下格式的文本行的文本文件:

1,Harvey Specter,97
2,Mike Ross,84
3,Krimhilde Aust,94

第一个整数是学生ID,字符串是姓名,最后一个整数是标记。

我想遍历文本文件中的每一行,将其转换为列表并使用列表中的元素为我的类创建一个对象。到目前为止,我有这个:\

with open('records.txt', 'r') as records:
    for line in records:
        line = line.replace(',',' ')
        x = line.split()
        x[1:3] = [' '.join(x[1:3])]
    

我想在每次迭代中为我的类创建一个新对象,如下所示:(我知道这是错误的)

x[0] = Student(x[0],x[1],x[2]

这里的问题在于我的变量。我需要(我知道这是错误的,请不要激怒我大声笑)动态为我的 for 循环将创建的每个列表创建一个唯一变量,以便我可以向我的班级发送一个新对象。

我想我需要创建一个新的学生 ID 列表并使用它来创建变量?

【问题讨论】:

  • "为我的 for 循环将创建的每个列表动态创建一个唯一变量" 你为什么这么认为?每次通过列表,您使用Student(x[0],x[1],x[2]),并创建一个新的Student。没问题。 “这样我就可以向我的班级发送一个新对象。”我不知道您认为“将对象发送给班级”是什么意思。
  • 对于初学者,使用csv 模块,不要乱用手动解析你的csv。
  • 无论如何,不​​,您永远需要动态创建变量。使用像listdict 这样的容器。这里的列表似乎是一种合理的方式。

标签: python list class variables


【解决方案1】:

文件格式类似于csv。试试这个代码:

import csv

students = []

with open('records.txt', 'r') as records:
    reader = csv.reader(records)
    for row in reader:
        student = Student(
            student_id = row[0],
            student_name = row[1],
            student_marks = row[2]
        )
        students.append(student)
    

【讨论】:

  • @adirabargil 刚刚修复,感谢您的关注。
【解决方案2】:

试试这个

students=[]
with open('records.txt', 'r') as records:
    for line in records:
        #no need to replace all commas with spaces
        id,name,mark = line.split(",")
        #add student to student list
        students.append(Student(id,name,mark))

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多