Я создал собственный класс, который расширяет enum.Flag
:
from enum import Flag
class StrFlag(Flag):
def __new__(cls, verbose):
value = len(cls.__members__)
obj = object.__new__(cls)
obj._value_ = 2 ** value
obj.verbose = verbose
return obj
class Year(StrFlag):
FIRST = 'First'
SECOND = 'Second'
THIRD = 'Third'
FOURTH = 'Fourth'
GRADUATE = 'Graduate'
FACULTY = 'Faculty'
OTHER = 'Some string with a space'
Теперь я хочу добавить UNDERGRADUATE
и STUDENT
в класс. Я знаю, что работает следующий код:
Year.UNDERGRADUATE = Year.FIRST | Year.SECOND | Year.THIRD | Year.FOURTH
Year.STUDENT = Year.UNDERGRADUATE | Year.GRADUATE
, но я хочу поместить
UNDERGRADUATE = FIRST | SECOND | THIRD | FOURTH
STUDENT = UNDERGRADUATE | GRADUATE
в определение класса. Тем не менее, Python не позволит мне сделать это, потому что все они строки. Можно ли сделать код чище?