Как записать данные из файла в список, заполненный экземплярами классов? - PullRequest
0 голосов
/ 22 декабря 2018

Я довольно новичок в питоне.Я думал о создании простого списка студентов в качестве «начальной» программы.Моя идея состояла в том, чтобы иметь файл .txt с информацией о нескольких учениках и прочитать данные в список, полный классов учеников.И после этого пусть «пользователь» поработает с данными.

Я попытался прочитать данные и разделить их, чтобы я мог добавить новый экземпляр Student () в список с разделенной информацией.

Однако, это не сработало так хорошо.

class Student:
     def __init__(self, name, number, age):
          self.name = name
          self.number = number
          self.age = age

     def StartUp():
          with open("students.txt", "r") as file:
              contents = file.readlines()

          studentslist = []

          for line in contents:
              line = line.rstrip()
              x = line.split(" ")
              studentslist.append(Student(x[0], x[1], x[2]))
         return studentslist



   #  the data in the .txt file look like this:
   #  Michael 3 17
   #  Jake 16 18
   #  and so on

После запуска приложения и распечатки списка учеников он распечатывает местоположения каждого ученика в памяти.

КакМогу ли я сделать так, чтобы я получил фактические значения?Или, может быть, написать это более просто?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Прежде всего, как упоминает @Mayank, вам необходимо переопределить методы __repr__ и __str__, чтобы можно было печатать объект так, как вы хотите.Тогда вы сможете извлечь всех студентов из файла и распечатать их или сохранить их в списке:

class Student:
  def __init__(self, name, number, age):
    self.name = name
    self.number = number
    self.age = age

  def __repr__(self):
    return " ".join(list(map(str,[self.name,self.number,self.age])))

def loadStudents():
  with open('students.txt','r') as inFile:
    lines = [line.split() for line in inFile]
    students = [Student(elem[0], int(elem[1]), int(elem[2])) for elem in lines]
    return students

loadStudents()
0 голосов
/ 22 декабря 2018

Вы должны печатать список, содержащий ваши Student объекты напрямую.По умолчанию Python печатает ячейки памяти объектов, так как не знает, как вывести его строковое представление.Вы можете определить это для своего класса, определив специальные методы __repr__ или __str__.

Вы можете определить метод __str__() в своем классе Student следующим образом:

def __str__(self):
    return "name: {}, number: {}, age: {}".format(self.name, self.number, self.age)

Посмотрите эту статью, если хотите узнать больше о специальных методах Python: http://getpython3.com/diveintopython3/special-method-names.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...