Python中如何根据用户输入创建类对象并解决变量未定义报错
报错核心原因
add_student()中创建的学生类实例是函数内部局部变量,函数没有返回值,执行结束后实例就会被回收,外部代码完全无法访问到这个对象。- 最后一行写的
print_info(Amy)中,Python会把Amy当作已定义的变量名解析,但代码里从来没有声明过名为Amy的变量,自然会抛出名称未定义的错误。用户输入的"Amy"只是存储在函数内部的字符串值,不会自动生成同名全局变量。
修正后可运行代码
class Student: def __init__(self, name, gpa): self.name = name # 输入内容默认是字符串,将GPA转为浮点型存储更符合业务逻辑 self.gpa = float(gpa) def get_info(self): return self.name, self.gpa def add_student(): name = input("Please enter a student name: ") gpa = input("Please enter the gpa of {a}: ".format(a = name)) print("{a} with gpa {b} is saved in the database.".format(a = name, b = gpa)) # 将创建好的学生实例返回给外部调用方 return Student(name, gpa) def print_info(student_obj): stu_name, stu_gpa = student_obj.get_info() print("Name: {a} GPA: {b}".format(a = stu_name, b = stu_gpa)) # 用变量接收add_student返回的实例对象 current_stu = add_student() # 将实例传入打印方法输出信息 print_info(current_stu)
补充说明
- 如果需要存储多个学生信息,可以定义一个列表,每次调用
add_student()后把返回的实例追加到列表中,后续遍历列表就能批量打印所有学生信息。 - 类名遵循Python命名规范建议使用大驼峰格式,也就是首字母大写,和普通函数、变量做区分。
内容的提问来源于stack exchange,提问作者H.Y. FUNG
相关产品推荐
相关产品推荐

