问一个 Python 枚举类的问题

查看 102|回复 3
作者:Ricardoo   
今天偶然看到枚举的一种写法,我测试后感觉有些奇怪
import enum
class TestEnum( str,enum.Enum):
    A = "a"
这里同时继承了 str 和 Enum ,
我测试了一下语句,
repr(TestEnum.A)
>>> ""
str(TestEnum.A)
>>> TestEnum.A'
TestEnum.A == 'a'
>>> True
这里的 TestEnum.A == 'a' 结果为 True , 是怎么判断的?
如果 TestEnum 是 dataclass 类的变量,在 json dumps 时也会自动转换,这是怎么做到的?
from dataclasses import dataclass, asdict
import json
@dataclass
class A:
    a: TestEnum=None
test_a = A(TestEnum.A)
asdict(test_a)
>>> {'a': }
json.dumps(asdict(test_a))
>>> {"a": "a"}
python 版本 3.9.16

testenum, Python, Enum, asdict

cosmain   
多继承,继承了 str 的一些成员函数 == 应该是调用了成员方法。
不过这个还真是一个不错的方法。==也好,json 也好
westoy   
因为 Enum 的实现里,Enum 的 members 本身就是这个 Enum 类的实例.......
而你 TestEnum 这个又是继承的 str
导致 TestEnum.A 也变成了 str......
arischow   
https://github.com/python/cpython/blob/ce2383ec6665850a1bdffad388876481b6f3205f/Lib/enum.py#L1276
https://github.com/irgeek/StrEnum
您需要登录后才可以回帖 登录 | 立即注册

返回顶部