最近做了一些豆瓣的产品业务代码的Python 3迁移相关的准备工作。首先当然是要去改那些基础Model,除了代码符合Python3语法要求,这种基础的、核心的代码也要加上类型注解,结果一上来就遇到个问题,和大家分享下。 下面是一个模拟的简单版本的例子(豆瓣厂工和前厂工会理解这种写法)
我简单介绍下上面这段代码要做的事情:
Python是一种动态类型化的语言,不会强制使用类型提示,所以我们要借用外部的工具mypy做类型检查:
mypy的执行结果没有返回内容,说明我写的类型注解没有问题。但是运行不了
即使把 这部分去掉,下面的ImageCover那部分也会抛错:
这个问题可以看 PEP 563 ,简单地说是因为类型注解部分求值太早了,那个时候类还没创建完!
怎么办呢?让类型注解「延迟求值」,使用Python 3.7新加入的方案:
添加第一行,这样就可以了。
使用字符串替代类
第二次更新: 2018-12-30 19:55:57
文章发出后,@abc.zxy和@杨恺Thomas Young同学都提出了另外一个解决方案,就是使用对应字符串作为类型值:
领取专属 10元无门槛券
私享最新 技术干货