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

如何将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,提问作者최승규

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:18:15