如何判断继承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
相关产品推荐
相关产品推荐

