[英]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 的属性。 方差只适用于泛型; 泛型函数没有这个属性。 后者应该只使用没有
covariant
或contravariant
关键字 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.