我想知道在 Python 中类型提示“集合”类的正确方法?
我有一个集合类,其实例属性为“T”类型,用于保存项目集合:
from dataclasses import dataclass, field
from typing import TypeVar, Union
@dataclass
class SurfaceTypeA:
def common_method(self) -> None:
pass
@dataclass
class SurfaceTypeB:
def common_method(self) -> None:
pass
T = TypeVar("T", bound=Union[SurfaceTypeA, SurfaceTypeB])
@dataclass
class SurfaceCollection[T]:
_surfaces: list[T] = field(default_factory=list)
def run_common_method_on_surfaces(self) -> None:
for s in self._surfaces:
s.common_method()
运行良好,但在我的 IDE (VS-Code) 中,我在线上收到类型警告
s.common_method()
:
无法访问类型“object*”的成员“common_method”
有没有正确的方法来提示这样的场景,以便 VS-Code 识别类型?
您正在混合新旧语法。您可以使用
TypeVar
或 class Foo[T]:
。尝试一下
class SurfaceCollection[T: SurfaceTypeA | SurfaceTypeB]: