如何扩展枚举派生类的Python类属性

2024-10-03 04:28:55 发布

您现在位置:Python中文网/ 问答频道 /正文

from enum import Enum

class ErrorCode(str, Enum):
    GENERAL_ERROR = 'A general error has occurred.'
    INVALID_RECIPIENT_EMAIL_ADDRESS = 'The recipient email address provided is not a valid email address.'

    @classmethod
    def addErrorsAsAttrib(cls, err_code, err_description):
        setattr(cls, err_code, err_description)

extended_error_codes = ErrorCode.addErrorsAsAttrib('NEW_ERROR2', Enum('NEW_ERROR2', 'The new error 2'))

print(ErrorCode.__members__.keys())

# OUTPUT:
# dict_keys(['GENERAL_ERROR', 'INVALID_RECIPIENT_EMAIL_ADDRESS'])

我试图找到一种方法来动态地将新的错误代码添加到我的ErrorCode类(一个枚举派生类)中,但无法确定正确的方法。根据代码示例-我尝试了setattr(),但这并没有按预期执行。任何帮助都将不胜感激


Tags: theaddressemailerrorenumgeneralclserr
1条回答
网友
1楼 · 发布于 2024-10-03 04:28:55

Enum被设计为不允许扩展。不过,根据您的用例,您有两个选项:

    class Country(JSONEnum):
        _init_ = 'abbr code country_name'  # remove if not using aenum
        _file = 'some_file.json'
        _name = 'alpha-2'
        _value = {
                1: ('alpha-2', None),
                2: ('country-code', lambda c: int(c)),
                3: ('name', None),
                }
    extend_enum(ErrorCode, 'NEW_ERROR2', 'The new error 2')

1披露:我是Python stdlib ^{}^{} backportAdvanced Enumeration (^{})图书馆的作者

相关问题 更多 >