from__future__import annotations

最近做了一些豆瓣的产品业务代码的Python 3迁移相关的准备工作。首先当然是要去改那些基础Model,除了代码符合Python3语法要求,这种基础的、核心的代码也要加上类型注解,结果一上来就遇到个问题,和大家分享下。 下面是一个模拟的简单版本的例子(豆瓣厂工和前厂工会理解这种写法)

最近做了一些豆瓣的产品业务代码的Python 3迁移相关的准备工作。首先当然是要去改那些基础Model,除了代码符合Python3语法要求,这种基础的、核心的代码也要加上类型注解,结果一上来就遇到个问题,和大家分享下。

下面是一个模拟的简单版本的例子(豆瓣厂工和前厂工会理解这种写法):

我简单介绍下上面这段代码要做的事情:

Python是一种动态类型化的语言,不会强制使用类型提示,所以我们要借用外部的工具mypy做类型检查:

mypy的执行结果没有返回内容,说明我写的类型注解没有问题。但是运行不了

即使把 这部分去掉,下面的ImageCover那部分也会抛错:

这个问题可以看 [PEP 563](https://www.python.org/dev/peps/pep-0563/) ,简单地说是因为类型注解部分求值太早了,那个时候类还没创建完!

怎么办呢?让类型注解「延迟求值」,使用Python 3.7新加入的方案:

这样就可以了

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181230G0UV2O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券