如何从 dic 在 Python 中动态更新/创建枚举?

问题描述 投票:0回答:2

我有一个自定义枚举,但有时我想更新它。

请参阅下面的示例:

from enum import StrEnum

class Colors(StrEnum):
    WHITE = '#ffffff'
    BLACK = '#000000'

如果我有这样的字典:

{"red": "#BE3E23", "green": "#47735b"}

如何更新上面的枚举定义?

我的想法是创建一个名为

@classmethod
from_dict
函数来更新列表。

我不确定是否保留

StrEnum
继承,或者是否转移到
NamedTuple
或任何其他更好的对象来处理此问题。

python dictionary enums
2个回答
2
投票

您使用类方法来更新枚举定义的想法似乎不错。以下是如何使用

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

0
投票

您可以像这样动态更新

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'

这将允许您将字典中的颜色添加到您的枚举中。

© www.soinside.com 2019 - 2024. All rights reserved.