Python 类型注释,其中第二个参数引用第一个参数

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

我有以下 Python 函数,我正在尝试为其确定正确的注释。第二个参数从第一个参数派生出它的类型。

        def q( type, func : Callable[[type], str]) -> bool:
            nonlocal text
            if isinstance( node, type ):
                text = func( node )
                return True
            return False

它是访问者模式的一部分,将对象与正确的类型相匹配,然后分派到接受该类型的函数。我像下面这样使用它。

        _ = \
            q( doc_tree.Block, self._get_block ) or \
            q( doc_tree.Section, self._get_section ) or \
            q( doc_tree.Text, self._get_text ) or \
            fail()

功能如下:

    def _get_section( self, node : doc_tree.Section ) -> str:

q( doc_tree.Section, self._get_section )
的调用在
mypy
中失败,并出现错误:

error: Argument 2 to "q" has incompatible type "Callable[[Section], str]"; expected "Callable[[type], str]"

如何正确注释

q
函数中的类型?

python python-typing mypy
1个回答
1
投票

你想要一个

TypeVar
:

from typing import TypeVar

T = TypeVar("T")

def q( type: T, func : Callable[[T], str]) -> bool: ...
© www.soinside.com 2019 - 2024. All rights reserved.