如何将Items.py中的所有item实例存入字典?
提取模块中Item实例的解决方案
方法1:主动维护实例列表(推荐方案)
这是最清晰、易维护的方式,在Items.py里专门维护一个存储所有实例的列表:
# Items.py class Item: def __init__(self, name, sellable): self.name = name self.sellable = sellable # 统一存储所有Item实例 all_items = [] # 创建实例时加入列表 item_1 = Item("sword", True) all_items.append(item_1) item_2 = Item("shield", False) all_items.append(item_2)
之后在Sell.py中直接导入这个列表,按需转成字典:
# Sell.py import Items class Sell: def __init__(self): # 以物品名称为键、实例为值构建字典 self.items = {item.name: item for item in Items.all_items} self.inv = self.items.copy() # 根据需求初始化inv字典
方法2:遍历模块属性筛选实例(无需修改Items.py)
如果无法改动Items.py,可以遍历模块的属性,筛选出Item类的实例:
# Sell.py import Items class Sell: def __init__(self): self.items = {} # 遍历模块的所有属性 for attr_name, attr_value in Items.__dict__.items(): # 排除类定义,只保留Item实例 if not isinstance(attr_value, type) and isinstance(attr_value, Items.Item): # 可选:用实例的name属性当键,或者用原变量名(如item_1)当键 self.items[attr_value.name] = attr_value self.inv = self.items.copy()
错误原因说明
你之前用self.items = {item for item in item_file}报错,是因为item_file是导入的模块对象,模块本身不是可迭代容器,不能直接用for循环遍历。
内容的提问来源于stack exchange,提问作者최승규
相关产品推荐
相关产品推荐

