子类化含__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
相关产品推荐
相关产品推荐

