繁体   English   中英

如何在 Python 中定义通用协变 function?

[英]How can I define a generic covariant function in Python?

我想定义一个 function example ,该示例采用Widget类型的参数或任何扩展Widget并返回与参数相同类型的参数。 因此,如果Button扩展Widget ,则调用example(Button())会返回Button类型。

我尝试了以下方法:

T_co = TypeVar('T_co', Widget, covariant=True)

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

但是类型检查器(Pyright)忽略了协方差。 经过进一步研究,我在PEP 484中发现了一条注释:

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

但是,如果我尝试在没有注释中指定的协变参数的情况下定义通用 function :

T_co = TypeVar('T_co', Widget)

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

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

我怎样才能做到这一点?

我能够在MyPy 文档中找到答案。 原来我在寻找bound ,而不是covariant 这可以这样做:

T = TypeVar('T', bound=Widget)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM