Mypy返回了我不理解的错误(也无法以简化形式重新创建)。验证错误非常困难(给定问号)。
有人知道这个错误是什么意思吗?问号具体表示什么?
Unsupported type Type[typeBaseTab?]
相关代码:
typeBaseTab = TypeVar("typeBasePage", bound="BasePage") # any instance subclass of BaseTab
typeNavCls = Type[typeBasePage] # error occurs here - trying to make an alias
class Nav:
def __init__(self, cls: typeNavCls):
self.cls: typeNavCls = cls
class BasePage(Base):
...
# redacted because it's huge
同样,如果我尝试以非常简化的形式重新创建上述代码,mypy不会出错。
typeB = TypeVar('typeB', bound='B')
tAlias = Type[typeB]
class Nav:
def __init__(self, cls: tAlias):
self.cls: tAlias = cls
class A: pass
class B(A): pass
我应该以不同的方式问这个问题,我相信我找到了问号,但是距离弄清楚为什么在mypy中发生错误的原因还差得远。
https://mypy.readthedocs.io/en/latest/literal_types.html
如果未在
Final
中提供显式类型,则c
的类型变得对上下文敏感:mypy基本上会尝试“替换”在执行键入之前使用的原始分配值检查。这就是为什么显示的c
类型为Literal[19]?
的原因:最后的问号反映了这种上下文相关的性质。