我有一个自定义枚举,但有时我想更新它。
请参阅下面的示例:
from enum import StrEnum
class Colors(StrEnum):
WHITE = '#ffffff'
BLACK = '#000000'
如果我有这样的字典:
{"red": "#BE3E23", "green": "#47735b"}
。
如何更新上面的枚举定义?
我的想法是创建一个名为
@classmethod
的 from_dict
函数来更新列表。
我不确定是否保留
StrEnum
继承,或者是否转移到 NamedTuple
或任何其他更好的对象来处理此问题。
您使用类方法来更新枚举定义的想法似乎不错。以下是如何使用
StrEnum
基类实现此目的的示例:
from enum import StrEnum
from typing import Mapping
class Colors(StrEnum):
WHITE = '#ffffff'
BLACK = '#000000'
@classmethod
def from_dict(cls, color_dict: Mapping[str, str]):
for color_name, hex_code in color_dict.items():
setattr(cls, color_name.upper(), hex_code)
# Usage
color_dict = {"red": "#BE3E23", "green": "#47735b"}
Colors.from_dict(color_dict)
print(Colors.RED) # Output: #BE3E23
print(Colors.GREEN) # Output: #47735b
print(Colors.WHITE) # Output: #ffffff
print(Colors.BLACK) # Output: #000000
您可以像这样动态更新
StrEnum
:
from enum import StrEnum
class Colors(StrEnum):
WHITE = '#ffffff'
BLACK = '#000000'
@classmethod
def from_dict(cls, color_dict):
for name, value in color_dict.items():
setattr(cls, name.upper(), value)
# EXAMPLE USAGE
Colors.from_dict({"red": "#BE3E23", "green": "#47735b"})
print(list(Colors)) # This includes new colors
print(Colors.RED) # Output: '#BE3E23'
这将允许您将字典中的颜色添加到您的枚举中。