Typing - тип возвращаемого значения функции совпадает с типом выражения
Рассмотрим код:
def foo() -> ??:
return bar()
Как я могу сказать, что я хочу вернуть тип foo
быть таким же, как тип возврата bar()
?
В C++ я мог бы использовать decltype
что-то вроде:
auto foo() -> decltype(bar()) {
return bar();
}
Я не мог найти эквивалент Python. Есть ли?
2 ответа
Решение
Если bar
определяется, вы можете получить доступ к его подписи
In [1] from inspect import signature
In [2]: def bar(a: int) -> float:
...: return float(a)
...:
In [3]: def foo(a: int) -> signature(bar).return_annotation:
...: return bar(a)
...:
In [4]: signature(foo)
Out[4]: <Signature (a: int) -> float>
При этом, я не уверен, что вам нужно, если вы делаете это для статической проверки типов, потому что foo
тип возвращаемого значения может быть выведен из bar
's (по крайней мере, статический анализатор PyCharm делает это).
Встроенная библиотека Python позволяет создавать пользовательские типы, вы можете описать новый класс типов и связать обе функции с этим классом в качестве возвращаемого значения.