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,无报错
这种方法的优势:
- 先通过
isclass过滤所有非类对象,避免issubclass触发TypeError - 逻辑简洁,一次完成“是类”且“是Enum子类”的双重判断
内容的提问来源于stack exchange,提问作者tofarr
相关产品推荐
相关产品推荐

