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 позволяет создавать пользовательские типы, вы можете описать новый класс типов и связать обе функции с этим классом в качестве возвращаемого значения.

Другие вопросы по тегам