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

时间:2019-06-16 17:09:15

标签: python-3.x types annotations mypy

我具有下面的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函数中的类型?

1 个答案:

答案 0 :(得分:1)

您想要一个TypeVar

from typing import TypeVar

T = TypeVar("T")

def q( type: T, func : Callable[[T], str]) -> bool: ...