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

Python Enum继承后基类初始化失败,参数不匹配报错求解

Python Enum子类__init__报错原因分析

核心原因:Enum的特殊实例化规则

Python标准库的Enum类在创建枚举成员时,会自动向类的__init__方法传递两个位置参数:

  • 第一个是枚举成员的名称(比如DeSwitch.ON的name就是字符串"ON")
  • 第二个是枚举成员对应的值(比如DeSwitch.ON的value就是(1, "开启"))

如果你的子类DeSwitch/EnSwitch中定义的__init__方法只声明了self一个参数,或者调用父类初始化时没有正确传递这两个参数,就会触发TypeError: __init__() takes 1 positional argument but 2 were given。

常见错误场景示例

比如错误的写法:

from enum import Enum

class Base(Enum):
    @classmethod
    def from_string(cls, s):
        pass

class DeSwitch(Base):
    ON = (1, "开启")
    OFF = (0, "关闭")
    
    def __init__(self):
        super().__init__()  # 错误:没有传递Enum要求的name和value参数

修正方式

如果需要自定义初始化逻辑,必须让__init__接收对应参数并正确传递给父类:

class DeSwitch(Base):
    ON = (1, "开启")
    OFF = (0, "关闭")
    
    def __init__(self, value, desc):
        # 调用父类初始化,Enum的__init__会自动处理name参数,也可显式传递
        super().__init__()
        self.desc = desc  # 自定义属性

如果不需要自定义初始化逻辑,完全可以省略子类的__init__方法,Enum会自动完成成员的创建流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:50:42