You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:00:28