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
Post a Comment