Python – лучший способ создания Enums с иерархиейPython

Программы на Python
Anonymous
Python – лучший способ создания Enums с иерархией

Сообщение Anonymous »

Я хочу создать перечисления с иерархией, чтобы упростить проверку аргументов, проверку типов и т. д. Например, предположим, что я хочу перечислить различные типы сотрудников в компании, распределенных по отделам:

Код: Выделить всё

class ProductEmployee(Enum):
PM = 1
ANALYST = 2
MANAGER = 3

class EngEmployee(Enum):
DATA_ENG = 1
FRONTEND_DEV = 2
BACKEND_DEV = 3
Что я пробовал: создать новый Enum, включающий оба:

Код: Выделить всё

class Employee(Enum):
PM = ProductEmployee.PM
ANALYST = ProductEmployee.ANALYST
MANAGER = ProductEmployee.MANAGER
DATA_ENG = EngEmployee.DATA_ENG
FRONTEND_DEV = EngEmployee.FRONTEND_DEV
BACKEND_DEV = EngEmployee.BACKEND_DEV
Ожидаемое поведение заключается в том, что разные типы могут считаться одним и тем же «супертипом». Например, целое число является одновременно целым числом и числом. Число, а число с плавающей запятой также является числом. Число:

Код: Выделить всё

print(isinstance(1, numbers.Number))                    # True
print(isinstance(1, int))                               # True
print(isinstance(1.2, numbers.Number))                  # True
Поэтому в идеале я бы хотел, чтобы сотрудник.PM считался как сотрудником, так и продуктом. Вот что я на самом деле получаю:

Код: Выделить всё

print(isinstance(Employee.PM, Employee))                # True
print(isinstance(Employee.PM, ProductEmployee))         # False
print(isinstance(Employee.PM._value_, ProductEmployee)) # True
Технически это может сработать, но тот факт, что мне приходится использовать ._value_, кажется неправильным. Есть ли лучший способ создания иерархии типов с помощью Enum?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -hierarchy

Вернуться в «Python»