Как я могу получить все экземпляры класса enum, которые соответствуют критерию для данного, но неизвестного поля?
У меня есть следующие три класса, полученные из Enum
, два простых (VariableType
и VariableCategory
) и один, в котором экземпляры фактически хранят содержимое в полях (Variable
).
class VariableCategory(Enum):
SHORT = auto()
MEDIUM = auto()
LONG = auto()
class VariableType(Enum):
ONE = auto()
TWO = auto()
class Variable(Enum):
A = ('Variable A',
VariableCategory.SHORT,
VariableType.ONE,
1)
B = ('Variable B',
VariableCategory.MEDIUM,
VariableType.TWO,
2)
C = ('Variable V',
VariableCategory.SHORT,
VariableType.TWO,
3)
def __init__(self, name: str, variable_category: VariableCategory, variable_type: VariableType,
number:int) -> None:
self.name = name
self.variable_category = variable_category
self.variable_type = variable_type
self.number = number
Теперь я хотел бы создать функцию класса, которая может принимать произвольный параметр введите VariableType
или VariableCategory
и верните все соответствующие экземпляры Variable
:
@classmethod
def by_x(cls, x: Union[VariableType, VariableCategory]):
# something like return [cls[member] for member in cls.__members__ if x in cls[member]]
Например, если дано VariableType
соответствующих экземпляров Variable
, например:
>>> Variable.by_x(VariableType.ONE)
[Variable.A]
>>> Variable.by_x(VariableType.TWO)
[Variable.B, Variable.C]
>>> Variable.by_x(VariableCategory.SHORT)
[Variable.A, Variable.C]
>>> Variable.by_x(VariableCategory.MEDIUM)
[Variable.B]
>>> Variable.by_x(VariableCategory.LONG)
[]
Я также знаю, что могу использовать более специфичные c функции для одного из полей перечисления Variable
:
@classmethod
def by_variable_type(cls, variable_type: VariableType) -> List['Variable']:
return [cls[member] for member in cls.__members__ if cls[member].variable_type == variable_type]
Однако я не знаю, как сделать только одна, функция generi c вместо множества указанных c (то есть без проверки типа параметра и вызова соответствующего решения c соответственно).