Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以在其中定义一个新方法的枚举子类吗?_Python_Python 3.x_Enums - Fatal编程技术网

Python 我可以在其中定义一个新方法的枚举子类吗?

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 =

我想创建一个伪抽象(不必经历使用ABC的麻烦)枚举类,并在不同的类中对其进行子类化。我的所有子类都将使用相同的
\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我正在重构一些用于解析不同类型法律文本的代码。最终目标是扩展它(在其范围内添加新类型的文本)。每种类型的文本当前都由特定的枚举处理,它们看起来都很相似。这就是为什么我尝试使用超类。