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

Python 3中如何判断对象是否为类定义?含Enum相关测试场景

判断对象是否为类定义(且是Enum子类)的优化方法

先看几个测试场景:

  • 以下代码输出False:

    from enum import Enum
    type_ = str
    print(issubclass(type_, Enum))
    

    说明:str是类但不属于Enum的子类,因此返回False。

  • 以下代码输出True:

    from enum import Enum
    type_ = Enum('MyEnum', {'a': 1, 'b': 2})
    print(issubclass(type_, Enum))
    

    说明:通过Enum工厂方法创建的对象本身就是Enum的子类,因此返回True。

  • 以下代码抛出错误:

    from enum import Enum
    from typing import List
    type_ = List[str]
    print(issubclass(type_, Enum))
    # TypeError: issubclass() arg 1 must be a class
    

    说明:List[str]是泛型类型实例,并非类,直接调用issubclass会触发类型错误。

除了用try/except捕获异常外,更优的方法是结合inspect.isclass()先判断对象是否为类,再检查是否是Enum的子类:

from enum import Enum
from inspect import isclass
from typing import List

# 测试str类型
type_ = str
print(isclass(type_) and issubclass(type_, Enum))  # 输出False

# 测试自定义Enum
type_ = Enum('MyEnum', {'a': 1, 'b': 2})
print(isclass(type_) and issubclass(type_, Enum))  # 输出True

# 测试泛型类型
type_ = List[str]
print(isclass(type_) and issubclass(type_, Enum))  # 输出False,无报错

这种方法的优势:

  1. 先通过isclass过滤所有非类对象,避免issubclass触发TypeError
  2. 逻辑简洁,一次完成“是类”且“是Enum子类”的双重判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:04:59