Python count函数无法识别类实例?装备物品功能遇问题
问题核心
你用list.count()检查背包物品时失效,是因为背包里存的是物品类的实例,但input()得到的是字符串——Python默认会认为字符串和类实例是完全不同的对象,直接比较永远不相等,所以找不到目标物品。
解决方案1:遍历背包匹配物品名称
假设你的物品类有name属性(比如Wooden Dagger就是实例的name值),直接遍历背包找到对应实例即可,这是最直观的做法:
from colorama import Fore, Style # 先定义你的物品类(示例) class Item: def __init__(self, name, typeitem): self.name = name self.typeitem = typeitem # 修改后的equipItem方法 inventory = [] def equipItem(self): equipinput = input("选择要装备的物品: ") target_item = None target_idx = -1 # 遍历背包找对应物品 for idx, item in enumerate(self.inventory): if item.name == equipinput: target_item = item target_idx = idx break if target_item: if target_item.typeitem == "weapontype": # 交换到武器位(索引0) self.inventory[0], self.inventory[target_idx] = self.inventory[target_idx], self.inventory[0] print(f"已切换武器为 {equipinput}") else: # 交换到防具位(索引1) self.inventory[1], self.inventory[target_idx] = self.inventory[target_idx], self.inventory[1] print(f"已切换防具为 {equipinput}") game() else: print(f"{Fore.RED}你没有这个物品!{Style.RESET_ALL}") game()
解决方案2:重写物品类的相等判断方法
如果想继续用count()和index()这类列表方法,可以在物品类里重写__eq__方法,让它支持和字符串比较:
class Item: def __init__(self, name, typeitem): self.name = name self.typeitem = typeitem # 重写相等判断逻辑 def __eq__(self, other): # 若传入的是字符串,直接匹配物品名称 if isinstance(other, str): return self.name == other # 若传入的是其他Item实例,按默认规则比较 return super().__eq__(other)
修改后,你原来的count(equipinput)和index(equipinput)就能正常工作,Python会用你定义的规则判断实例和字符串是否相等。
验证示例
假设你的背包初始化是:
self.inventory = [Item("Wooden Dagger", "weapontype"), Item("Steel Sword", "weapontype")]
输入Steel Sword后,两种方案都能找到目标实例,将其交换到索引0的位置,最终背包变为:
self.inventory = [Steel Sword实例, Wooden Dagger实例]
完全符合预期。
内容的提问来源于stack exchange,提问作者Apollox
相关产品推荐
相关产品推荐

