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

如何从__init__.py自动生成Python类工厂feature_expander_factory

自动生成feature_expander_factory字典

当前手动维护feature_expander_factory字典(用于将类名映射到对应类)效率极低——类名变更或新增类时,都得手动修改字典。现在需要从给定的__init__.py文件中自动提取所有类,生成该字典,其中StrToListToColumns对应的键为ListToColumns,其余类直接用自身类名作为键映射到类本身。

原手动实现示例

from data_processing.feature_expanders import (
    CategoricalToOneHot,
    RFMSplitter,
    RFMSplitterAndOneHot,
    StrToListToColumns,
)

feature_expander_factory = dict(
    CategoricalToOneHot=CategoricalToOneHot,
    RFMSplitter=RFMSplitter,
    RFMSplitterAndOneHot=RFMSplitterAndOneHot,
    ListToColumns=StrToListToColumns,
)

给定的__init__.py内容

from data_processing.feature_expanders.AbstractFeatureExpander import AbstractFeatureExpander
from data_processing.feature_expanders.CategoricalToOneHot import CategoricalToOneHot
from data_processing.feature_expanders.RFMSplitter import RFMSplitter
from data_processing.feature_expanders.RFMSplitterAndOneHot import RFMSplitterAndOneHot
from data_processing.feature_expanders.StrToListToColumns import StrToListToColumns

自动生成方案

直接通过模块导入后遍历成员,自动构建字典,无需手动维护:

import data_processing.feature_expanders as feature_expanders_module

# 定义特殊类名映射规则
special_name_mapping = {
    "StrToListToColumns": "ListToColumns"
}

feature_expander_factory = {}
# 遍历模块中的所有成员,筛选出需要的类(排除抽象基类)
for class_name, class_obj in vars(feature_expanders_module).items():
    # 只处理类,且跳过AbstractFeatureExpander
    if isinstance(class_obj, type) and class_name != "AbstractFeatureExpander":
        # 应用特殊映射,否则使用原类名作为键
        dict_key = special_name_mapping.get(class_name, class_name)
        feature_expander_factory[dict_key] = class_obj

方案说明

  • 无需手动添加或修改字典条目,__init__.py中新增/修改导入的类时,字典会自动同步
  • 通过vars()获取模块的所有成员,筛选出类类型的对象
  • 用special_name_mapping处理特殊的类名映射需求,后续有其他特殊规则只需修改这个字典即可

内容的提问来源于stack exchange,提问作者Gooby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:19