键入-函数返回值类型与表达式的类型相同

时间:2019-01-22 22:40:34

标签: python python-3.x python-typing

考虑代码:

def foo() -> ??:
     return bar()

我怎么能说我希望foo的返回类型与bar()的返回类型相同?

在C ++中,我可以使用decltype,类似于:

auto foo() -> decltype(bar()) {
    return bar();
}

我找不到Python的等效版本。有吗?

2 个答案:

答案 0 :(得分:4)

如果定义了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的类型(至少是PyCharm的静态类型)中推断出来分析仪倾向于这样做)。

答案 1 :(得分:0)

Python的内置类型库可创建custom types,您可以描述一个新的类型类并将这两个函数与该类耦合在一起作为返回值。