如何在Python中模拟Rust带类型约束的impl语法?子类型问题咨询
在Python中模拟Rust的
impl<T> Trait for Struct<T> where T: Bound语法 我想要在Python里模拟Rust的以下语法:
impl<T> Trait for Struct<T> where T: Bound
(注:这里假设Struct未绑定自身的类型变量,这是Rust中的通用推荐做法)
我尝试的Python实现如下:
from dataclasses import dataclass @dataclass class A[T]: data: T def m[C: int](self: "A[C]") -> int: return self.data * 2 a1 = A(1) a2 = A("hi") a1.m() a2.m()
Pylance能正确标记a2.m()为错误,看起来这个实现是有效的,但我不确定这是不是Python中的最优方案。我尤其担心它和子类型的交互问题,比如下面这个例子:
@dataclass class B[T](A[T]): def m[C: str](self: "A[C]") -> int: return len(self.data) b = B(1) l: list[A[int]] = [b] a = l[0] # 被类型检查器视为A类型 a.m() # 类型检查通过,但运行时会报错
编辑说明:重新梳理了子类型相关的疑问并补充示例,我发现字符串注解"A[C]"和问题本身无关。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

