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() 但这没有按预期执行。任何帮助将不胜感激。
最佳答案
Enum
被设计为不允许扩展。不过,根据您的用例,您有几个选择:
- 从外部源(例如 json 文件)动态构建枚举。请参阅When should I subclass EnumMeta instead of 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
函数aenum
library 1:
extend_enum(ErrorCode, 'NEW_ERROR2', 'The new error 2')
1 披露:我是 Python stdlib Enum
的作者,enum34
backport ,以及 Advanced Enumeration (aenum
)图书馆。
关于python - 如何扩展 Enum 派生类的 Python 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68524617/