关于Python类型注解的几个实用小技巧

发布时间 2023-11-28 23:43:54作者: 顺其自然,道法自然

虽然python是动态类型语言, 但是python3.5引入的类型注解特性却很有用. 不但有助于源码阅读, 而且在类型提示和代码自动补全上也很方便. 但是它毕竟不是静态类型编译型语言, 有一些特殊的情况, 需要一些小技巧才能够处理.

引用后面定义的类型

由于python不是编译型语言, 如果在前面直接引用后面定义的类型是不行的. 如下所示:
image
会提示未定义的类.

此时有两种处理办法:

  • 使用字符串类型注解
test:'Test' = None
class Test:pass
  • 引入支持后向类型注解的特性
from __future__ import annotations
test:Test = None
class Test:pass

引用其他模块的类型, 但是又不真正导入此模块

有时候需要引用其他模块中定义的类型, 但是又不能真正导入此模块(不能真正导入的原因往往是避免循环的问题), 此时可以采用如下的技巧:

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from xxx import Yyy

其中TYPE_CHECKING变量在真正执行时是False, 并不会真正导入模块; 但是在类型检查时为True, 这样就可以享受类型注解的好处了.