基于dataclass的结构化枚举可运行,但冻结属性失效问题咨询
基于dataclass的结构化枚举可运行,但冻结属性失效问题咨询
各位大佬好!
Python内置的枚举类型(比如IntEnum、StrEnum)只能处理基础类型,但我想创建一个包含结构化对象的枚举。我尝试用dataclass结合Enum来实现,代码能正常跑起来,但发现一个问题——我给基类dataclass加了frozen=True,可冻结属性的功能好像没生效?
先贴一下我的实现代码:
from dataclasses import dataclass from enum import Enum from typing_extensions import assert_never @dataclass(frozen=True) class _BaseInstTypeDataclass: instance_type: str display_name: str class InstTypeDataClass(_BaseInstTypeDataclass, Enum): t2_micro = ("t2.micro", "t2.micro: Cheap!") r7i_2xlarge = ("r7i.2xlarge", "r7i.2xlarge: Expensive!") # 基础功能验证通过 assert list(InstTypeDataClass) == [ InstTypeDataClass.t2_micro, InstTypeDataClass.r7i_2xlarge, ] assert isinstance(InstTypeDataClass.t2_micro, InstTypeDataClass) # 类型检查也能正常工作 def f_dataclass(e: InstTypeDataClass): if e == InstTypeDataClass.t2_micro: ... elif e == InstTypeDataClass.r7i_2xlarge: ... else: assert_never(e)
目前这段代码的枚举实例化、类型检查都没问题,但当我尝试修改枚举实例的instance_type或者display_name属性时,居然能修改成功?按道理frozen=True应该会阻止这种修改才对。有没有大佬知道这是怎么回事?或者有没有更好的方式来实现这种结构化枚举,同时保证属性不可修改?
备注:内容来源于stack exchange,提问作者obk
相关产品推荐
相关产品推荐

