Python 输入前向声明

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

我正在尝试用这样的泛型类型编写一些代码:

from typing import Sequence, TypeVar, Hashable, Protocol, NoReturn


class _SortHashable(Protocol, Hashable):
    def __lt__(self, other) -> bool:
        ...

    def __eq__(self, other) -> bool:
        ...


SortHashableT = TypeVar("SortHashableT", bound=_SortHashable)

def foo(sequence: Sequence[SortHashableT]) -> NoReturn:
    ...

对于

other
对象的类型提示,我尝试了以下操作:

class _SortHashable(Protocol, Hashable):
    def __lt__(self, other: _SortHashable) -> bool:
        ...

但我想这不受支持,我的编辑将其标记为错误。有没有一种方法可以像 C++ 等语言那样转发声明类型?我在这个项目中使用 Python 3.10。

python python-typing
1个回答
3
投票

从 Python 3.11 开始,您可以在这种情况下使用

typing.Self

对于以前的版本,您可以将类名称用作字符串 -

"_SortHashable"
- 在这种情况下。

请注意,PEP 563是为了解决这个问题而创建的,以至于有一个

from future import ...
组允许将所有注释编译为字符串并稍后显式延迟评估。

但事实证明,很多边缘情况,甚至注释的整个用例都不起作用,因此 PEP 649 的创建是为了解决这些问题 - 但也导致了其他问题。

目前情况尚未解决,Python 3.12 的准备工作也没有明确的进展。

© www.soinside.com 2019 - 2024. All rights reserved.