#python #class #oop
#python #класс #ооп
Вопрос:
Я прошу прощения, если я плохо сформулировал вопрос, но позвольте мне попытаться объяснить. Я написал это:
class Student:
def __init__(self, name):
self.name = name
class Course:
def __init__(self, name, capacity = 3):
self.name = name
self.students = []
self.capacity = capacity
def add_student(self, student):
if len(self.students) < self.capacity:
self.students.append(student)
else:
return False
def display_students(self):
print(list(self.students))
После этого я создам несколько объектов student и продолжу добавлять их в курсы. Для каждого курса учащиеся продолжают добавляться в переменную self.учащиеся внутри класса для курсов. Теперь, если я хочу выполнить итерацию по этому списку и напечатать имена учеников, я получаю что-то вроде этого: ‘[Объект Student в 0x7fc46dade5b0>,Объект Student в 0x7fc46dade760>]’
Как мне сделать так, чтобы вместо этого я получал имена учеников.
Ответ №1:
Еще лучшим способом было бы изменить строковое представление ваших объектов Student на что-то более удобное для пользователя:
class Student:
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name # assuming name is a string
Таким образом, вам не нужно ничего менять в вашем классе курса.
Ответ №2:
Вы печатаете экземпляр student, а не атрибуты student.
Если вы хотите напечатать только имя:
def display_students(self):
for student in self.students:
print(student.name)
Если вы хотите напечатать имя и, возможно, другие атрибуты:
class Student:
def __init__(self, name, hobby):
self.name = name
self.hobby= hobby
def __str__(self):
return ("Name: " self.name ", Hobby: " self.hobby)
Теперь вы можете распечатать экземпляр, и вместо адреса памяти экземпляра он будет печатать все, что возвращает метод str.
student1 = Student("John", "Tennis")
print(student1)
Это выведет
Name: John, Hobby: Tennis
Ответ №3:
Ну ладно, неважно. Я понял это. Метод должен читать:
def display_students(self):
for item in self.students:
print(item.name)
Оставляем это здесь на случай, если это поможет кому-то другому. Итак, «элемент» здесь на самом деле является объектом «Student».