我一直在使用python的enum库,遇到了一个难题。在文档中,它们显示了一个auto-numbering enum示例,其中定义了一些内容:
class Color(AutoNumber):
red = ()
green = ()
...
我想创建一个类似的类,但该值将自动从成员的名称中设置,并保留通过执行str
和enum
mixin stuff获得的功能
比如说:
class Animal(MagicStrEnum):
horse = ()
dog = ()
Animal.dog == 'dog' # True
我查看了enum模块的源代码,并尝试了许多与__new__
和EnumMeta
类有关的变体
更新:2017-03-01
原始答案
使用
AutoStr
类的困难在于枚举成员的名称没有传递到创建它的代码中,因此无法使用它。另一个问题是str
是不可变的,因此我们不能在创建枚举之后更改这些类型(例如,通过使用class decorator)。最简单的方法是使用Functional API:
这给了我们:
下一个最简单的事情是,假设您想为将来的枚举使用创建一个基类,那么它将类似于my
DocEnem
:使用中:
注意,与第一个选项不同,
DocEnum
成员是而不是str
s如果你想用困难的方法:子类
EnumMeta
,并在创建成员之前修改新的Enum
类字典:这给了我们:
1披露:我是Python stdlib ^{} 、^{} backport 和Advanced Enumeration (^{}) 库的作者。
也许您正在寻找由^{} 类自动提供的
name
属性但如果你真的想自杀的话。我相信这会带来一个完整的世界(我已经消除了最明显的一个)。
相关问题 更多 >
编程相关推荐