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

子类化含__new__方法的伪抽象Enum类触发报错,如何解决?

解决Enum基类__new__方法导致的AttributeError问题

这个错误的根源很明确:你的BasePattern类里的__new__方法没有返回创建的实例对象!Enum在初始化成员时,会依赖__new__返回的实例来完成后续的属性绑定,而你的代码只创建了对象却没返回,默认会返回None,自然会触发'NoneType' object has no attribute '_value_'的错误。

只需要在父类的__new__方法末尾加上return obj就能解决问题,完全不需要在每个子类里重复定义通用的__new__方法。修改后的完整代码如下:

from enum import Enum

class BasePattern(Enum):
    def __new__(cls, pattern, groups):
        obj = object.__new__(cls)
        obj._value_ = pattern
        obj.groups = groups
        return obj  # 关键:返回创建的实例对象

class ExamplePattern(BasePattern):
    example1 = (r"regex", ["group1"])

# 测试验证
print(ExamplePattern.example1.value)  # 输出: regex
print(ExamplePattern.example1.groups)  # 输出: ['group1']

这样修改后,所有子类都能正常继承父类的__new__逻辑,完成自定义属性的初始化。本质上是遵循了Python中__new__方法的核心要求:必须返回创建的实例对象(除非有单例等特殊场景需求),而Enum类对这一点的依赖会更严格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:47:49