Как правильно набирать обратные вызовы, каждый из которых принимает разные подтипы общего типаPython

Программы на Python
Ответить
Anonymous
 Как правильно набирать обратные вызовы, каждый из которых принимает разные подтипы общего типа

Сообщение Anonymous »

Сейчас у меня есть этот код:

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

class A(abc.ABC):
pass

class B(A):
pass

class C(A):
pass

def fn_b(b: B) -> None:
pass

def fn_c(c: C) -> None:
pass

d : dict[type[A], Union[Callable[[A], None], Callable[[B], None]]] = {
B: fn_b,
C: fn_c,
}
Теперь это упрощено: на практике у меня могут быть десятки подклассов A. Со временем могут добавляться новые классы, а пары ключ/значение могут добавляться/изменяться в d.
Есть ли лучший способ ввести d, чем массивный Союз? Опцией может быть dict[type[A], Callable[..., None]], но, очевидно, это не означает, что Callable должны принимать только подклассы A.< /p>
Функции fn_* предназначены для отделения от классов B, C и т. д. Поэтому перемещение их в методы не решит проблему.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -overarchi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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