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

Python3.8中枚举类继承无法生效?求问题根源

枚举类继承在Python3.7与3.8的行为差异原因

问题现象

以下代码在Python3.7中运行正常:

from enum import Enum

class UserRoles(Enum):
    ADMIN = 'ADMIN'
    MANAGER = 'MANAGER'
    MEMBER = "MEMBER"


class AuthorRoles(UserRoles, Enum):
    pass

但在Python3.8中执行会抛出如下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/enum.py", line 146, in __prepare__
    metacls._check_for_existing_members(cls, bases)
  File "/usr/lib/python3.8/enum.py", line 527, in _check_for_existing_members
    raise TypeError(
TypeError: AuthorRoles: cannot extend enumeration 'UserRoles'

原因分析

  • Python3.7及更早版本的Enum元类未严格限制继承已包含枚举成员的类,默许了这种不规范的继承操作。
  • Python3.8开始,EnumMeta元类新增了_check_for_existing_members检查方法:遍历父类时,若发现父类是已定义枚举成员的Enum类,直接抛出TypeError禁止继承。
  • 你的代码中UserRoles已明确定义三个枚举成员,因此在3.8中继承它的AuthorRoles会触发该检查逻辑,导致报错。
  • 官方文档一直不推荐继承已有成员的枚举类,3.8的改动只是将这种不规范用法从“默许”转为“明确禁止”,以此规避继承枚举类可能引发的成员冲突、行为不一致等潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:07:42