我具有下面的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
函数中的类型?
答案 0 :(得分:1)
您想要一个TypeVar
:
from typing import TypeVar
T = TypeVar("T")
def q( type: T, func : Callable[[T], str]) -> bool: ...