Mypy拒绝使用`type(name,(bases,),{})`创建的类型对象

时间:2017-12-04 13:31:45

标签: python python-3.x types python-3.6 mypy

我在让mypy接受类型对象时遇到了一些麻烦。我是 我确信我做错了但是我的谷歌搜索到目前为止还没有让我得到任何答案。

Good

构建的内容类似于' Bad'没问题,而像#error: Invalid type "test.Bad" error: Bad? has no attribute "a" '用mypy检查失败:

{{1}}

1 个答案:

答案 0 :(得分:3)

基于mypy wiki的Unsupported Python Features部分,目前不支持此类运行时创建。它无法理解函数定义中的Badreveal_type(Good)时使用reveal_type(Bad)mypy应该明确这一点。

使用Any来解决这些问题的方法。使用Python 3.6变量注释语法:

Bad: Any = type('Bad', (), {'a':1})

或者,使用Python< 3.6:

Bad = type('Bad', (), {'a':1}) # type: Any

(在两种情况下Any应首先从typing导入

当然,这基本上意味着你的功能现在接受任何东西。要付出的代价,但这就是你用动态语言得到的;因为Bar是在运行时定义的,所以 理论上可以是任何东西: - )