Python 我可以在其中定义一个新方法的枚举子类吗?
我想创建一个伪抽象(不必经历使用ABC的麻烦)枚举类,并在不同的类中对其进行子类化。我的所有子类都将使用相同的Python 我可以在其中定义一个新方法的枚举子类吗?,python,python-3.x,enums,Python,Python 3.x,Enums,我想创建一个伪抽象(不必经历使用ABC的麻烦)枚举类,并在不同的类中对其进行子类化。我的所有子类都将使用相同的\uuuuu new\uuuu方法,因此我想在超类中定义它。这样做时,我在定义子类时遇到了一个AttributeError:'NoneType'对象没有属性'\u value' 我的尝试: from enum import Enum class BasePattern(Enum): def __new__(cls, pattern, groups): obj =
\uuuuu new\uuuu
方法,因此我想在超类中定义它。这样做时,我在定义子类时遇到了一个AttributeError:'NoneType'对象没有属性'\u 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"])
是否有一种简单的方法来实现这一点,或者最好在每个子类中定义公共的
\uuuuu new\uuuuu
?如果需要考虑这一点,我将使用Python3.7.7。无论何时使用\uuuuuuuuuuuuuuuu
都必须返回一个对象,否则将返回None
(这是Python中任何函数/方法的默认值)
至于子类化您自己的Enum
基类——只要在该基类中没有任何成员,您就可以了——根据需要设置尽可能多的默认行为
旁注:在ExamplePattern
类中,不需要外部的括号集;圆括号是一种分组运算符,仅在存在歧义时才需要创建元组——逗号,,
,构成元组:
>>> a = 1, 2
>>> type(a)
<class 'tuple'>
>>> b = (5 ) # no comma
>>> type(b)
<class 'int'>
>a=1,2
>>>类型(a)
>>>b=(5)#无逗号
>>>类型(b)
请问您想解决什么问题?这感觉像是一个XY问题,似乎会产生更多的问题,而不是解决原来的问题\uuuu new\uuu()
必须返回一些东西,这些东西将成为实例的值。您正在创建None
s,这里。@jasonharper:这是我的问题,很明显我错过了它。。。如果你想把你的评论变成答案,我会接受。@DeepSpace我正在重构一些用于解析不同类型法律文本的代码。最终目标是扩展它(在其范围内添加新类型的文本)。每种类型的文本当前都由特定的枚举处理,它们看起来都很相似。这就是为什么我尝试使用超类。