Python Typehint 通用集合

问题描述 投票:0回答:1

我想知道在 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 识别类型?

python visual-studio-code type-hinting python-typing
1个回答
0
投票

您正在混合新旧语法。您可以使用

TypeVar
class Foo[T]:
。尝试一下

class SurfaceCollection[T: SurfaceTypeA | SurfaceTypeB]:
© www.soinside.com 2019 - 2024. All rights reserved.