Это мой код, я не знаю, что я делаю неправильно. TypeError: объект «Студенты» не подлежит подписке это ошибка этого кода, и я не знаю, как это исправить, я пробовал много способов
import operator
from operator import itemgetter, attrgetter
class Students:
def __init__(self,name,age,height):
self.name = name
self.age = age
self.height = height
def input_student_info():
name = input("Enter student name: " )
age = input("Enter student age: " )
height = input("Enter student height: " )
student = Students(name,age,height)
return student
def print_student_info(student):
print("Student name: " + student.name)
print("Student age: " + student.age)
print("Student height: " + student.height)
def input_students_info():
std = []
total_students = int(input("How many student: "))
for i in range(total_students):
print("Student " + str(i+1) + ": " )
stu = input_student_info()
std.append(stu)
return std
def print_students_info(std):
for i in range(len(std)):
print("Student " + str(i+1) + ": " )
print_student_info(std[i])
def sort_list(std):
std.sort(key=operator.itemgetter(0))
def main():
students = input_students_info()
input("Press Enter to continue")
students_new = sort_list(students)
print_students_info(students_new)
main()
пожалуйста, исправьте то, что я делаю неправильно, и объясните, что я делаю неправильно
В sort_list
вы используете operator.itemgetter(0)
.
Если у вас есть такой объект Students
:
s = Students(...)
Затем operator.itemgetter(0)
выполняет что-то аналогичное:
s[0]
В объекте Students
нет значения, к которому можно получить доступ с помощью квадратных скобок, поэтому вы получаете сообщение об ошибке 'Students' object is not subscriptable
.
Вместо этого вы должны сортировать с помощью метода attrgetter()
, который обращается к именованному атрибуту объектов.
stu.sort(key=operator.attrgetter("age"))