【发布时间】:2019-04-25 14:24:17
【问题描述】:
我有多个类,有些继承 Enum,有些不继承,所有这些最终都混合在大数组中,如下所示:
from enum import Enum
class TestEnum(Enum):
VAL_A = 0
VAL_B = 1
class TestNotEnum():
def __init__(self):
self.var = 1
由于我希望有一个尽可能简单的代码供其他人使用,我想以相同的方式调用所有类的构造函数,以避免尽可能多的混乱。
这就是我想要初始化它们的方式:
classes = [TestEnum(), TestNotEnum()]
TestNotEnum 类没有问题,但TestEnum 抛出以下异常:TypeError: __call__() missing 1 required positional argument: 'value'。这是由于我(错误地)使用了 Enum。
我该怎么做才能让TestEnum 类仍然继承 Enum 并且有一个没有参数的构造函数?
我尝试了以下(以及一些类似的调整):
class TestEnum(Enum):
VAL_A = 0
VAL_B = 1
def __init__(self):
super(TestEnum, self).__init__()
但我最终只会遇到不同的错误,例如TypeError: __init__() takes 1 positional argument but 2 were given
【问题讨论】:
-
classes列表的具体用途是什么?你打算如何使用它的成员?文档中的Planet示例向您展示了如何在Enum子类上定义__init__(),但我不确定您想要它做什么。 -
在我使用的 API 中,这些类封装了与另一台机器通信的位(0 和 1)。类数组内容的顺序允许程序知道如何解释这些位。这也允许在协议更改时轻松调整程序(因为用户只需交换类的顺序/添加一个/删除一个)
-
好吧,这听起来有点过头了,但documentation 似乎表明 Enum 子类被设计为永远不会被显式实例化。
-
啊,你是对的,你的链接给出了答案:这是不可能的,因为枚举都是单例。谢谢你的回答^^。
标签: python class enums constructor python-3.4