action: str
@dataclass
class GenesUpdated:
action: Literal["genes_updated"] = "genes_updated"
А BaseEvent будет использоваться где-то сам по себе или только его наследники? Если нет, то зачем ему декоратор?
не будет, только наследники, я хочу зафиксирвоать что везде action нужен
GenesUpdated это наследник BaseEvent что ли?
Обновление генов? Надеюсь все кролики целы
Что-то такое в голову пришло, но это из разряда эзотерики имхо T = TypeVar('T', bound=str) class BaseEvent(generic[T]): action: T @dataclass class GenesUpdated(BaseEvent[Literal["genes_updated"]]): action = "genes_updated"
T = TypeVar('T') @dataclass class BaseEvent(Generic[T]): action: T @dataclass class GenesUpdated(BaseEvent[Literal['genes_updated']]): action: Literal['genes_updated'] = "genes_updated" Так мб?
А у тебя action'ы берутся не из enum'а?
action: Literal['genes_updated'] = "genes_updated" Тут тайпхинт не нужен
Двачую, енум и в путь
>>> vars(GenesUpdated()) {} >>> fields(GenesUpdated) () не, не работает, нужен хинт все равно
три раза genes_updated это перебор
Ну что-то такое class BaseEvent: action: ActionEnum @dataclass class GenesUpdated(BaseEvent): action = ActionEnum.genes_updated
тогда при добавлении нового наследника мне надо общий Enum править. Типичное нарушение OCP
Обсуждают сегодня