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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:23:08