python - 如何在 python 中输入提示名称元组?
问题描述
类型提示在python中可以定义返回类型,那么当一个函数返回namedtuple类型时,那么如何定义呢
def bar(func):
def decorator(*args, **kwargs):
return namedtuple('data', 'name user')(**func(*args, **kwargs))
return update_wrapper(decorator, func)
@bar
def info() -> NamedTuple:
return {'name': 'a1', 'user': 'b1'}
期望类型 'NamedTuple',得到 Dict[str,str]
如您所知,函数info()
return Dict[str, str]
,但装饰器@bar
改变了它。现在函数info()
返回一个namedtuple对象,那么有没有办法通过python中的类型提示来指示函数info()
返回namedtupe对象?
解决方案
NamedTuple 实例是通过collections.namedtuple()函数创建的。
由于您对命名元组的类型元素感兴趣,您可以创建一个自定义类型来继承 NamedType 的类型化版本(如@jab 所述)并在类型提示中使用它,如下所示。
from typing import NamedTuple
class CustomType(NamedTuple):
name: str
user: str
def info() -> CustomType:
return CustomType('a1', 'b1')
推荐阅读
- r - 如何使用ggplot2将图例标题和键顺序和颜色更改为R中的多层条形图
- exception - RavenDB ArgumentOutOfRangeException 索引创建 - 版本 4.2.102
- graphql - 有没有办法在尝试调用缓存之前检查 Apollo 是否缓存了数据?
- c++ - 编译器如何从已删除的默认 ctor lambda 生成闭包?
- angular - 如何将 Angular 应用程序与 IP 摄像机连接
- common-lisp - 如何(zerop #*000)在普通的 lisp 中?
- java - 忽略回文检查器上的大小写
- reactjs - Redux - 如何更新数组中的项目
- c++ - C ++为什么当循环大小变大时这个带有vector.insert()的并行for循环会崩溃?
- docker - 如何指定 Docker Hub 令牌范围