You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:02:39