【发布时间】:2020-09-01 02:41:15
【问题描述】:
我想创建一个伪抽象(无需使用 ABC 的麻烦)枚举类,并将其子类化到不同的类中。我所有的子类都将使用相同的__new__ 方法,所以我想在超类中定义它。这样做,我在定义子类时遇到了AttributeError: 'NoneType' object has no attribute '_value_'。
我的尝试:
from enum import Enum
class BasePattern(Enum):
def __new__(cls, pattern, groups):
obj = object.__new__(cls)
obj._value_ = pattern
obj.groups = groups
class ExamplePattern(BasePattern):
example1 = (r"regex", ["group1"])
有没有一种简单的方法可以让它工作,或者最好在每个子类中定义公共__new__?如果担心的话,我使用 Python3.7.7。
【问题讨论】:
-
请问您要解决什么问题?这感觉像是一个 XY 问题,并且似乎创造了更多的问题而不是解决原来的问题
-
__new__()必须返回一些东西,这将成为实例的值。你在这里创建Nones。 -
@jasonharper:那是我的问题,很明显我错过了......如果你想把你的评论变成答案,我会接受。
-
@DeepSpace 我正在重构一些用于解析不同类型法律文本的代码。最终目标是扩展它(在其范围内添加新类型的文本)。每种类型的文本当前都由一个特定的枚举处理,并且它们看起来都很相似。这就是我尝试使用超类的原因。
标签: python python-3.x enums