Python动态创建Pet类实例调用check_stats()报AttributeError求助
问题分析
错误AttributeError: 'str' object has no attribute 'check_stats'的核心原因是:你尝试调用check_stats()方法的对象是字符串类型,而非Pet类的实例。这说明在动态创建宠物实例的逻辑中,你误将宠物名称(字符串)存入了槽位,而非存储Pet类的实例对象。
常见错误场景与修复方案
假设你的动态创建逻辑是类似下面的错误写法:
class Animal: def __init__(self, name): self.name = name def check_stats(self): print(f"宠物名称: {self.name}") class Pet(Animal): def __init__(self, name): super().__init__(name) self.hunger = 50 # 示例属性 # 错误的动态创建逻辑 pet_slots = [] user_input = input("请输入宠物名称: ") # 错误:把字符串存入了槽位,而非Pet实例 pet_slots.append(user_input) # 调用时报错 pet_slots[0].check_stats() # 触发AttributeError
修复方法
确保动态创建时,将Pet类的实例对象存入槽位,而非字符串:
# 正确的动态创建逻辑 pet_slots = [] user_input = input("请输入宠物名称: ") # 创建Pet实例并存入槽位 new_pet = Pet(user_input) pet_slots.append(new_pet) # 正常调用方法 pet_slots[0].check_stats() # 正常输出宠物属性
其他排查方向
- 检查槽位存储逻辑:确认列表/字典等存储容器里,存的是
Pet实例,不是名称字符串 - 检查输入处理流程:是否在创建实例后,用名称字符串覆盖了实例变量
- 检查槽位调用逻辑:确认通过编号取出的是实例对象,而非其他字符串类型数据
比如用字典存储槽位的错误与正确写法对比:
# 错误示例 pet_slots = {} slot_num = input("输入槽位编号: ") pet_name = input("输入宠物名称: ") pet_slots[slot_num] = pet_name # 存了字符串 # 正确示例 pet_slots[slot_num] = Pet(pet_name) # 存实例
内容的提问来源于stack exchange,提问作者Anyx
相关产品推荐
相关产品推荐

