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
相关产品推荐
相关产品推荐

