Код: Выделить всё
class Message(Protocol):
...
class M1(Message):
...
def handler1(message: M1) -> None:
return None
handler_container: dict[type[Message], Callable[..., None]] = {M1: handler1}
def handle_message(message: Message) -> None:
handler = handler_container[type(message)]
return handler(message)
Код: Выделить всё
def handle_message(message: Message[T]) -> T:
...
Код: Выделить всё
class M2(Message[int]):
...
def m2_handler(message: M2) -> int:
...
# or
class M3(Message[None]):
...
def m3_handler(message: M3) -> None:
...
Код: Выделить всё
handler_container: dict[type[Message[Any]], Callable[..., Any]
Есть идеи, как я могу добиться такой безопасности? Я понимаю, что полностью статически напечатать это может оказаться невозможным, поэтому при необходимости я буду в порядке с кастингом. Открыт для любых идей, спасибо!
Подробнее здесь: https://stackoverflow.com/questions/760 ... onstraints