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

无需if语句根据能力字典自动实例化对应类的实现方法

无if语句的实现方案

最简洁的实现方式是使用类映射表+工厂函数的模式,完全不需要写多分支if判断,后续扩展新类也更灵活。

完整实现代码

第一步:定义基础类

class Man:
    def __init__(self, abilities):
        self.strength = abilities["strength"]

class Women:
    def __init__(self, abilities):
        self.empathy = abilities["empathy"]

第二步:建立映射规则

把能力字段和对应的类做绑定,后续新增类只需要更新这个映射表即可:

class_mapping = {
    "strength": Man,
    "empathy": Women
}

第三步:实现无if的工厂函数

用生成器表达式匹配对应类,无需显式写if分支:

def create_instance(ability_dict):
    return next(
        target_class(ability_dict)
        for ability_key, target_class in class_mapping.items()
        if ability_key in ability_dict
    )

测试效果

abilities1 = {
    "empathy" : 1000
}
abilities2 = {
    "strength" : 100
}

print(type(create_instance(abilities1))) # 输出 <class '__main__.Women'>
print(type(create_instance(abilities2))) # 输出 <class '__main__.Man'>

扩展说明

  • 如果存在一个字典同时包含多个匹配key的场景,调整class_mapping里的键顺序即可控制匹配优先级,排在前面的key会优先命中
  • 如果需要处理无匹配的场景,可以给next方法加默认值,比如返回默认类实例或者抛出自定义异常,示例:
    def create_instance(ability_dict):
        return next(
            (target_class(ability_dict) for ability_key, target_class in class_mapping.items() if ability_key in ability_dict),
            DefaultPerson(ability_dict) # 无匹配时返回默认类实例
        )
    
  • 该方案比多分支if的扩展性强,新增类时不需要修改工厂函数的逻辑,只需要在映射表里新增一条规则即可
  • 示例中的性别相关设定仅作功能演示使用,无实际指代意义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:00:03