主要想做的就是
- 拿到一个对象, cast 出来这个对象是否符合 typing 里那些奇怪类型, Union Optional 等, 尤其是 Dict[str, int] 时候要判断每一个 key value 的类型
- 拿到不符合的类型时候, 自动转换一下, 比如 '1.1' 需要 float 类型, 自动转成 1.1
找过一大些资料都失败了, 目前结论如下
-
mypy 没法直接看源码, 然后看文档也没找到那种代码里 import mypy 然后做 cast 的功能
-
typing.cast 在标准库那个是预留给 linter 用的, 实际用不上
-
目前已经尝试过
__origin__和__args__来做了, 效果还算不错, 但是感觉自己一点点拆包有点傻, 尤其是自己把不符合的先_alias, 然后对_GenericAlias做上述俩魔术方法, 遇到了_SpecialForm直接凉
mypy 官网提到的 MonkeyType (Python 3) and PyAnnotate (type comments only). 还没试