Код: Выделить всё
def mul(a: int | float, b: int | float): # return type?
return a * b
Как правильно и кратко аннотировать тип возвращаемого значения? Я знаю, что могу сделать это с помощью @overload:
Код: Выделить всё
from typing import overload
@overload
def mul(a: int, b: int) -> int: ...
@overload
def mul(a: float, b: int | float) -> float: ...
@overload
def mul(a: int | float, b: float) -> float: ...
def mul(a, b):
return a * b
Код: Выделить всё
def mul(a: T1, b: T2) -> promote_types(T1, T2):
return a * b
Примечания:
- Я знаю о рекомендации просто аннотировать все, принимая int с плавающей точкой, но в моей настройке более сложные TypeVars, выбор int и float — это всего лишь простой пример.
- Я знаю, что могу просто использовать Union[int, float]< /code>, но мне нужно, чтобы это было конкретно. В зависимости от конкретных типов, с которыми вызывается функция, тип возвращаемого значения также должен быть точным, а не объединением.
Подробнее здесь: https://stackoverflow.com/questions/775 ... -promotion