使用python type()打印时区分,两个不同的类型具有相同的名称但不同的子类

问题描述 投票:0回答:1

我有两个具有相同子类名称的不同类,并使用 type() 将其打印出来给我相同的输出。

from enum import IntEnum

class Car:
    class Manufacturer(IntEnum):
        BMW = 0
        AUDI = 1
        
class Plane:
    class Manufacturer(IntEnum):
        AIRBUS = 0
        BOEING = 1
        
print(type(Car.Manufacturer.BMW))
print(type(Plane.Manufacturer.AIRBUS))

两者的输出是:

<enum 'Manufacturer'>
<enum 'Manufacturer'>

虽然它确实知道它需要知道的类型并进行适当的比较

print(type(Car.Manufacturer.BMW) == type(Plane.Manufacturer.AIRBUS)) # is false as it should be
python types
1个回答
0
投票
Python 中的

type()

 函数返回对象的 
type
。在您的代码中, 
Car.Manufacturer.BMW
Plane.Manufacturer.AIRBUS
 都是 
IntEnum
 的成员,这就是为什么 
type()
 都调用输出 
<enum 'Manufacturer'>

如果您需要在类型方面更清楚地区分两个制造商枚举,您可以考虑以下选项:

选项 1:利用 __qualname__

 属性

__qualname__

属性公开类的完全限定名称,包括其父类。

print(Car.Manufacturer.BMW.__class__.__qualname__) # Output: Car.Manufacturer print(Plane.Manufacturer.AIRBUS.__class__.__qualname__) # Output: Plane.Manufacturer

选项 2:在模块级别定义枚举

通过在类外部定义枚举,可以避免嵌套并建立唯一的名称。

from enum import IntEnum class CarManufacturer(IntEnum): BMW = 0 AUDI = 1 class PlaneManufacturer(IntEnum): AIRBUS = 0 BOEING = 1 class Car: pass class Plane: pass print(type(CarManufacturer.BMW)) # Output: <enum 'CarManufacturer'> print(type(PlaneManufacturer.AIRBUS)) # Output: <enum 'PlaneManufacturer'>
    
© www.soinside.com 2019 - 2024. All rights reserved.