You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:45:28