How do I use getattr and setattr properly in Python? -


i created class in python called student. need create 5 instances of class, , able return attribute instance of user's choice, set attribute new value. here code:

class student:      # initializer student class     def __init__(self):         self.name = str(input("what name of student? "))         self.id_number = int(input("what i.d. number of " + self.name + "? "))         self.gpa = float(input("what " + self.name + "'s gpa? "))         self.expected_grade = int(input("what expected grade of " + self.name + "? "))         self.work_status = str(input("does " + self.name + " work full-time or part-time? "))      menu = str("1. , print student gpa." + '\n' +                "2. add new student class." + '\n' +                "3. change gpa of student." + '\n' +                "4. change expected grade of student." + '\n' +                "5. print data of students in tabular format." + '\n' +                "6. quit program. ")      # student list     student_list = []      # print list of instances of student in alphabetical order     def display_students(self):         student.student_list.sort()         print("")         n in student.student_list:             print(n)         print("")      # print tabulated format of instances of student , attributes     def display_student_info(self):         student.student_list.sort()         print("name\ti.d. #\t\tgpa\t\texpected grade\t\temployment")         print("----------------------------------------------------------")         name in student.student_list:             print(name, '\t', getattr(name, "id_number"),                   '\t', getattr(name, "gpa"), '\t', getattr(name, "expected_grade"), '\t', getattr(name, "work_status"))      # menu selection user     def menu_selection(self):         valid_input = false         user_input = int(input())         while valid_input == false:             try:                 if int(user_input) not in range(1, 6):                     raise valueerror                 else:                     valid_input = true             except valueerror:                 print("you have entered invalid selection menu. please enter number 1 6. ")                 user_input = int(input(str()))         # , print student gpa         if user_input == 1:             student.display_students(self)             name = str(input("which student gpa for? "))             print(name + ": " + getattr(student.name, "gpa"))         # add new student class         if user_input == 2:             print("")             print("okay. let's add new student class. ")             student.__init__(self)             student.student_list.append(student.name)         # change gpa of student         if user_input == 3:             print("")             print("okay. let's change gpa of student in class.")             self.display_students(student)             name = str(input("which student's gpa change? "))             new_gpa = str(input("what " + name + "'s new gpa be? "))             setattr(student.name, student.gpa, new_gpa)         # change expected grade of student         if user_input == 4:             print("")             print("okay. let's change expected grade of student.")             print("which student's expected grade change? ")             self.display_students()             name = str(input("which student's expected grade change? "))             new_expected_grade = float(input("what " + name + "'s new expected grade be? "))             setattr(student, str(student.expected_grade), new_expected_grade)         # print data of students in tabular format         if user_input == 5:             print("")             print("okay, here data entered students: ", '\n')             student.display_student_info(self)         # quit program         if user_input == 6:             print("")             print("okay. quitting program.")             quit()   def main():      count = 0     while count < 5:         student.__init__(student)         student.student_list.append(student.name)         print("")         count += 1      print("now students information has been entered, can select menu below alter student data or quit program."           + '\n' + "please make selection: " + '\n')     print(student.menu)     student.menu_selection(student)  main() 

i can not getattr or setattr methods working. how can them working?

the second argument getattr , setattr strings name attribute want. is, getattr(name, "expected_grade"). using variable second argument means value of variable used name. generally, though, there no real difference between name.expected_grade , getattr(name, 'expected_grade'), although can supply getattr optional third argument returned (instead of raising attributeerror) if named attribute not exist.

there nothing in code indicate need getattr or setattr; use dotted name syntax access attributes.


Comments