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

Python中如何通过输入实例名获取对应类实例的属性值?

解决方法

别用eval或exec处理用户输入,既不安全又容易出问题。推荐用字典映射的方式,把用户输入的实例名称(字符串)和对应的实例对象绑定,代码清晰还安全。

修改后的完整代码:

# Employee是一个初始化参数为self、name、status的类

e1 = Employee("Tom, Lincoln", "Present")
e2 = Employee("Sam, Bradley", "Absent")
print(e1.status)

# 用字典存储实例名称与对应对象的映射
employee_map = {
    "e1": e1,
    "e2": e2
}

while True:
    try:
        cmd = input("Cmd: ")

        if cmd == "status_check":
            who = input("Who: ")
            # 从字典中取出实例并获取status
            if who in employee_map:
                print(employee_map[who].status)
            else:
                print(f"找不到名为{who}的员工实例")
    except KeyboardInterrupt:
        # 处理Ctrl+C退出循环的场景
        break

为什么不推荐用eval?

eval(who).status虽然能实现功能,但如果用户输入的不是e1/e2,而是恶意代码(比如__import__('os').system('rm -rf /')),会直接执行,带来严重安全风险。字典映射只允许预设的实例名称,完全规避了这个问题。

备选方案(若坚持用数字提取)

如果一定要通过提取输入中的数字来实现,可以这么写,但可读性和灵活性不如字典:

if who.startswith("e") and who[1:].isdigit():
    num = int(who[1:])
    # 把实例按顺序放进列表
    employees = [e1, e2]
    if 1 <= num <= len(employees):
        print(employees[num-1].status)
    else:
        print("无效的实例编号")
else:
    print("输入格式错误,请输入e1或e2")

还是首推字典映射的方案,代码维护性和安全性都更优。

内容的提问来源于stack exchange,提问作者Ppeng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:20:51