Python中type()打印同名嵌套子类的显示差异及类型判断疑问
问题解答
为什么type()输出相同但实际类型不同
Python的IntEnum(继承自Enum)生成的枚举类型,其__repr__和__str__方法默认只显示枚举类的本地名称(也就是Manufacturer),不会包含它所在的外部类(Car或Plane)的信息。
所以虽然Car.Manufacturer和Plane.Manufacturer是两个完全独立的类对象,在内存中拥有不同的身份,但它们的类型字符串输出都是<enum 'Manufacturer'>,导致视觉上看起来一样。但本质上这是两个不同的类,因此type(Car.Manufacturer.BMW) == type(Plane.Manufacturer.AIRBUS)会返回False。
如何区分这两种类型
可以通过以下几种方式明确区分这两个枚举类型:
直接比较枚举类本身:
直接对比两个枚举类对象,而不是它们的实例类型:print(Car.Manufacturer == Plane.Manufacturer) # 输出 False查看
__qualname__属性:
这个属性会返回类的完整限定名称,包含外部类的层级:print(Car.Manufacturer.__qualname__) # 输出 'Car.Manufacturer' print(Plane.Manufacturer.__qualname__) # 输出 'Plane.Manufacturer'使用
isinstance()检查实例归属:
针对枚举实例,用isinstance判断它属于哪个枚举类:print(isinstance(Car.Manufacturer.BMW, Car.Manufacturer)) # 输出 True print(isinstance(Car.Manufacturer.BMW, Plane.Manufacturer)) # 输出 False查看类的唯一标识
id():
不同的类对象拥有不同的内存地址,通过id()可以区分:print(id(Car.Manufacturer) != id(Plane.Manufacturer)) # 输出 True
内容的提问来源于stack exchange,提问作者Jokubas11
相关产品推荐
相关产品推荐

