【发布时间】:2019-05-05 21:26:11
【问题描述】:
我想扩展 Python 枚举以支持未定义的值。
我的用例:我想从 Enums 中受益(例如,能够用说话的名字来寻址/比较已知条目),但我也希望它支持未知值。如果值后面没有名称,str 应该简单地打印值的 str 表示,比较应该失败。
让我给你一个简短的例子,我想要什么:
from enum import Enum
class Foo(Enum):
A = 1
B = 2
C = 3
def __str__(self):
return self.name
print(Foo(1)) # prints 'A'
print(Foo(2)) # print 'B'
print(Foo(3)) # prints 'C'
print(Foo(1) == Foo.A) # prints 'true'
print(Foo(4)) # I'd expect '4'
print(Foo(123)) # I'd expect '123'
print(Foo(123) == Foo.A) # I'd expect False
当然最后几行失败了。
有没有办法扩展 Enums,或者是否有另一种简单的 Python 方式? (请不要使用第三方库。)
【问题讨论】:
-
这与使用枚举相反,枚举应该枚举生成一组已知值。
-
好的,明白了——还有其他简单的pythonic方法可以实现我的目标吗?
-
Please explain what you need this for -- 很可能有更合适的解决方案。
-
让我试试。我解析魔法常数(整数)。其中一些是明确定义的,并且有它们的名称,有些则没有。我需要检查其中一些定义明确的整数,并且我想在比较期间使用它们的口语名称(为了代码的可读性)。稍后,我想使用这些值的类型安全表示来生成配置文件。如果实例有一个说话的名字,打印它。如果没有,只需使用其原始整数值。枚举满足这些要求,只要我没有未定义的值。但是有一些。希望对您有所帮助。
-
我可以看到这种情况正在发生。检查我的答案以获得解决方案。
标签: python inheritance enums