我有以下 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
函数中的类型?
你想要一个
TypeVar
:
from typing import TypeVar
T = TypeVar("T")
def q( type: T, func : Callable[[T], str]) -> bool: ...