Python中如何将变量与类结合使用?新手代码运行异常求助
问题根源
- 你调用
input()获取到的用户输入是纯字符串类型,和你预先定义的woodsman变量没有关联,字符串类型本身不存在name/desc/type这些属性,因此运行时会抛出属性不存在的报错。 - 额外注意:
type是Python内置的关键字,不建议作为类的属性名使用,避免后续引发命名冲突。
修正方案
你可以用字典建立「用户输入字符串」和「Item实例」的映射关系,根据用户输入匹配到对应的实例后再访问属性即可。
修正后的可运行代码
class Item: def __init__(self, name, description, item_type, mindamage, maxdamage): self.name = name self.desc = description self.item_type = item_type self.mindmg = mindamage self.maxdmg = maxdamage # 初始化物品实例 woodsman = Item("'Woodsman'", "An automatic chambered in .22lr", "gun", 4, 10) # 建立输入文本和实例的映射字典 item_map = { "woodsman": woodsman } inspect_input = input("inspect:").lower() # 先校验输入合法性再访问属性 if inspect_input in item_map: target_item = item_map[inspect_input] print(target_item.name) print(target_item.desc) print(target_item.item_type) else: print("未找到对应物品")
逻辑说明
- 把原来的
type属性改名成item_type,避免和Python内置的type()函数冲突 - 新增的
item_map字典的key是用户可能输入的文本,value是对应的Item实例,输入匹配后就能拿到真实的实例对象访问属性 - 新增输入合法性校验,避免用户输入不存在的物品名时直接抛出报错
内容的提问来源于stack exchange,提问作者JohnMcafeeDidn'tKillHimself
相关产品推荐
相关产品推荐

