首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中定义泛型协变量函数?

如何在Python中定义泛型协变量函数?
EN

Stack Overflow用户
提问于 2019-10-14 15:18:57
回答 1查看 1.1K关注 0票数 3

我想要定义一个函数example,它接受Widget类型的参数或任何扩展Widget并返回与参数相同类型的参数。因此,如果Button扩展了Widget,调用example(Button())将返回Button类型。

我尝试了以下几点:

代码语言:javascript
运行
复制
T_co = TypeVar('T_co', Widget, covariant=True)

def example(widget: T_co) -> T_co:
  ...

然而,类型检查器(Pyright)忽略协方差。经过进一步的研究,我在佩普484上找到了一条便条

注意:协方差或反方差不是类型变量的属性,而是使用该变量定义的泛型类的属性。方差仅适用于泛型类型;泛型函数不具有此属性。后者应该只使用没有covariantcontravariant关键字参数的类型变量来定义。

但是,如果我试图定义一个泛型函数,而不使用注释中指定的协变参数:

代码语言:javascript
运行
复制
T_co = TypeVar('T_co', Widget)

def example(widget: T_co) -> T_co:
  ...

我只能将Widget类型的值传递给函数(而不是Button)。

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-10-14 18:30:35

我在MyPy文档上找到了答案。原来我是在找bound,而不是covariant。这样做是可以的:

代码语言:javascript
运行
复制
T = TypeVar('T', bound=Widget)

def example(widget: T) -> T:
  ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58379692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档