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

如何判断继承str的Enum枚举实例的类型?

判断继承str的Enum实例类型的正确方式

当你用str和Enum混合继承定义枚举类时,枚举实例的实际类型是对应的枚举子类(比如EnumA),而非Enum本身。要判断一个对象是否属于任意枚举类的实例,或者是否是继承了str的枚举实例,可以用下面的方法:

方法1:直接用isinstance()判断是否为枚举实例

所有枚举实例都是Enum的子类实例,用isinstance()可以直接判断,不用关心具体是哪个枚举类:

from enum import Enum

class EnumA(str, Enum):
    RED = "red"

x = EnumA.RED
print(isinstance(x, Enum))  # 输出 True

方法2:判断是否为继承str的枚举实例

如果需要更精准,确认它是继承了str的枚举实例,可以写个辅助函数:

def is_str_based_enum(obj):
    # 先判断是不是枚举实例
    if not isinstance(obj, Enum):
        return False
    # 再检查对应的枚举类是否继承了str
    return str in obj.__class__.__bases__

print(is_str_based_enum(x))  # 输出 True

为什么之前的type()判断失效?

  • type(x)返回的是具体的枚举子类(比如EnumA),而不是Enum或者EnumType——EnumType是枚举类的类型(比如type(EnumA)才是EnumType),不是枚举实例的类型。
  • is是严格类型匹配,type(x)是子类,和Enum本身不是同一个类型,所以type(x) is Enum必然不成立。

内容的提问来源于stack exchange,提问作者TheRuedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:30:58