我有两个具有相同子类名称的不同类,并使用 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
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'>