【发布时间】:2019-03-18 11:43:03
【问题描述】:
假设我有一个预先存在的映射作为字典:
value_map = {'a': 1, 'b': 2}
我可以这样创建一个枚举类:
from enum import Enum
MyEnum = Enum('MyEnum', value_map)
并像这样使用它
a = MyEnum.a
print(a.value)
>>> 1
print(a.name)
>>> 'a'
然后我想为我的新枚举类定义一些方法:
def double_value(self):
return self.value * 2
当然,我可以这样做:
class MyEnum(Enum):
a = 1
b = 2
@property
def double_value(self):
return self.value * 2
但正如我所说,我必须使用预定义的值映射字典,所以我不能这样做。 如何做到这一点?我尝试从定义此方法的另一个类(如 mixin)继承,但我想不通。
【问题讨论】:
-
你就不能
Enum('MyEnum', {k: v * 2 for k, v in value_map.items()})吗? -
我可以,但是这个double_value只是一个虚拟的例子,我希望能够定义任何方法。
-
我不确定是什么阻止了您定义此类方法?请提供一个您实际尝试实现的示例
-
我不明白,你怎么能在那个方法上使用
self.value。由于没有名为value的实例变量:/ -
@DeepSpace 阻止我的是,如果我使用这个:
MyEnum = Enum('MyEnum', value_map),那么我无法定义方法。但是如果我使用这个class MyEnum(Enum): ...,那么我必须明确地写出所有的值,并且不能使用我预定义的字典。