mkone112, почитай внимательно примеры по ссылке. Оно позволяет зарегистрировать разные варианты одной функции в зависимости от типа её первого аргумента. Затем вызываешь "корневую" функцию, и она уже вызовет правильный вариант в зависимости от фактически переданного типа. Довольно ограниченно, но уже полезно.
Если это тебе категорически не подходит (например, нужно позарез чтобы были разные вторые или еще какие аргументы), то тут только один совет. Цепочку ifов обычно можно отрефакторить в список/словарь функций.
Именно - только первого, и в итоге все это превращается в пачку if. При этом typing не так давно научился в дженерики - мне кажется что это можно как-то использовать.
mkone112, интерпретатор питона вообще игнорирует type hints при работе, если только код явно не использует reflection чтобы их просмотреть. Собственно, даже runtime checkable протоколы в итоге содержат пачку if, проверяющих наличие нужных методов и полей в объекте.
Так что вариантов-то особо и нет, учитывая что дженерики нельзя быстро проверить через isinstance(). Вместо этого придётся разбирать параметры дженерика и проверять всё по отдельности, что абсолютно не универсально и очень муторно.
интерпретатор питона вообще игнорирует type hints при работе, если только код явно не использует reflection чтобы их просмотреть. Собственно, даже runtime checkable протоколы в итоге содержат пачку if, проверяющих наличие нужных методов и полей в объекте.
Да, вот я и думал - раз тайпчекеры используют эту логику для проверки типов - может ее можно задействовать в рантайме.
Так что вариантов-то особо и нет, учитывая что дженерики нельзя быстро проверить через isinstance(). Вместо этого придётся разбирать параметры дженерика и проверять всё по отдельности, что абсолютно не универсально и очень муторно.