2024-05-28 20:17:19 发布
网友
我知道这不是标准用例,但我需要动态地向Python中的IntEnum派生类添加元素。注意,使用函数式API动态创建枚举是不够的。我需要向现有枚举添加元素。我该怎么做?
IntEnum
背景:对于那些想知道为什么会有人想这样做的人。我正在包装库,枚举的值在库中定义。我可以使用库API查询名称和值。但我不能在初始化时执行,因为它依赖于库根据用户请求动态加载的组件。我可以在启动时加载所有组件,并在导入时使用函数API创建枚举,但这很费时,而且会产生副作用。
枚举是不可变的。您可以创建一个新的枚举来替换原始枚举:
from enum import Enum names = [m.name for m in ExistingEnum] + ['newname1', 'newname2'] ExistingEnum = Enum('ExistingEnum', names)
但是,任何现有的引用(例如,在其他模块中)都将继续使用旧的定义。
names可以是:
names
start
这是来自aenum library1的extend_enum函数的作业。
extend_enum
两个样本Enums:
Enum
from aenum import Enum class Color(Enum): black = 0 class ColorHelp(Enum): _init_ = 'value __doc__' black = 0, 'the absence of color'
extend_enum正在运行:
from aenum import extend_enum extend_enum(Color, 'white', 1) print Color, list(Color) print repr(Color.black), Color.black, repr(Color.white), Color.white print extend_enum(ColorHelp, 'white', 1, 'the presence of every color') print ColorHelp, list(ColorHelp) print repr(ColorHelp.black), ColorHelp.black, ColorHelp.black.__doc__, repr(ColorHelp.white), ColorHelp.white, ColorHelp.white.__doc__
这给了我们:
<enum 'Color'> [<Color.black: 0>, <Color.white: 1>] <Color.black: 0> Color.black <Color.white: 1> Color.white <enum 'ColorHelp'> [<ColorHelp.black: 0>, <ColorHelp.white: 1>] <ColorHelp.black: 0> ColorHelp.black the absence of color <ColorHelp.white: (1, 'the presence of every color')> ColorHelp.white None
1披露:我是Python stdlib ^{}、^{} backport和Advanced Enumeration (^{})库的作者。
枚举是不可变的。您可以创建一个新的枚举来替换原始枚举:
但是,任何现有的引用(例如,在其他模块中)都将继续使用旧的定义。
names
可以是:start
开始递增1(可以设置为关键字参数,默认为1)。start
开始递增1。这是来自aenum library1的
extend_enum
函数的作业。两个样本
Enum
s:extend_enum
正在运行:这给了我们:
1披露:我是Python stdlib ^{} 、^{} backport 和Advanced Enumeration (^{}) 库的作者。
相关问题 更多 >
编程相关推荐