为返回参数类型的Python函数指定类型注释

帕洛他布

如何正确键入以下函数的注释?

def f(cls: type) -> ???:
    return cls()

# Example usage:
assert f(int) == 0
assert f(list) == []
assert f(tuple) == ()

有没有一种办法型注释???的东西,涉及到价值cls,而不是仅仅Any或省略返回类型的注释?如果必须更改cls参数的类型注释,可以

致癌物质

使用CallableType的混合使用TypeVar来指示返回类型如何与参数类型相对应:

from typing import Callable, TypeVar, Type

T = TypeVar("T")


# Alternative 1, supporting any Callable object
def f(cls: Callable[[], T]) -> T:
    return cls()

ret_f = f(int)
print(ret_f)  # It knows ret_f is an int


# Alternative 2, supporting only types
def g(cls: Type[T]) -> T:
    return cls()

ret_g = f(int)
print(ret_g)  # It knows ret_g is an int

第一种选择接受任何可调用的对象;不只是创建对象的调用。


感谢您的更正@chepner

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果传递给带注释的函数的参数类型与指定的参数类型不匹配,是否可能使python抛出错误?

Python类型注释:注释返回库对象的函数的正确方法

以特征类型为参数的函数的返回类型不清楚

函数返回lambda的类型注释

从带mypy注释的python函数返回None,多种返回类型

TypeScript函数返回类型为null(如果参数为null)

在C ++中将函数返回类型指定为模板参数

没有指定参数和返回类型的函数指针

以参数类型为参数的函数类型

Python void返回类型注释

Python类型注释:继承方法的返回类型

如何指定函数类型的参数类型

在函数注释中指定类类型

命令行参数:函数返回类型为数组?

Typescript 根据参数强制函数返回类型为接口的键

python:函数类型参数

从函数返回类型推断模板参数类型

TypeScript - 基于参数类型的函数返回类型

从函数参数返回类型提示

正确的视图函数类型注释不带参数

为类型或返回类型的函数编写接口

如何基于参数中的函数返回类型指定打字稿条件类型

用户定义的对象作为Python中函数指定的参数类型

如何在异步Python函数中指定返回类型?

Rust函数根据类型注释返回不同类型的值

MapEntry - 指定类型注释

C ++:返回类型为T且不带T类型参数的模板函数将无法编译

在类型为并集的函数中无法正确推断参数和返回类型

使用函数的返回类型和参数类型作为模板类型