Fed*_*o S 1 python enums serialization json
我有一个类似于以下内容的枚举:
from enum import Enum
class Currencies(str, Enum):
EURO = ("EUR", True)
YEN = ("JPY", False)
supports_decimals: bool
def __new__(cls, value: str, supports_decimals: bool):
obj = super().__new__(cls)
obj._value_ = value
setattr(obj, "supports_decimals", supports_decimals)
return obj
Run Code Online (Sandbox Code Playgroud)
这允许这样的事情:
>>> Currencies.EURO.value
'EUR'
>>> Currencies.EURO.supports_decimals
True
>>> f"{Currencies.EURO}"
'EUR'
Run Code Online (Sandbox Code Playgroud)
然而:
>>> import json
>>> json.dumps(Currencies.EUR)
'""'
Run Code Online (Sandbox Code Playgroud)
如果我的枚举具有简单的字符串成员而不是元组,那么这将起作用,但它会导致空字符串,并且由于枚举的成员被视为str,所以自定义编码器类根本不会调用.default()它们,所以我无法定义他们的自定义编码。
问题可能归结为str.encode(),因为确实:
>>> Currencies.EUR.encode()
b''
Run Code Online (Sandbox Code Playgroud)
但即使知道这一点,我也不知道如何指示json.dumps()使用会员的_value_. 我尝试覆盖encode()并且可以Currencies.EUR.encode()工作,但json.dumps()仍然返回一个空字符串。
请注意,我宁愿保留枚举 a str, Enum,因为将其转换为简单的枚举会使我的应用程序的其他部分变得复杂。
您的枚举实例是空字符串。obj = super().__new__(cls)创建一个空字符串的实例。
创建一个非空字符串:
obj = super().__new__(cls, value)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |