如何解决我可以将定义了__new__方法的Enum子类化吗?
我想创建一个伪抽象(无需麻烦使用ABC)Enum类,并将其子类化为不同的类。我所有的子类都将使用相同的__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。
解决方法
每次使用__new__
时,都必须返回一个对象-否则返回None
(这是Python中任何函数/方法的默认值)。
就子类化自己的Enum
基类而言-只要您在该基类中没有任何成员,您就可以了-根据需要设置尽可能多的默认行为。
旁注:在您的ExamplePattern
类中,不需要外部括号;括号是分组运算符,仅在存在歧义时才需要创建元组-逗号,
是组成元组的原因:
>>> a = 1,2
>>> type(a)
<class 'tuple'>
>>> b = (5 ) # no comma
>>> type(b)
<class 'int'>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。