BHznJNs写 Python 这么多年,第一次知道这个避免循环导入的小技巧 中发帖

众所周知,Python 对于循环导入的处理一直很拉跨,稍不注意就容易出现运行时报错。 
今天在 review AI 写的代码时看到这样的用法:
if TYPE_CHECKING:
from .module import SomeType

class T:
prop: SomeType

为什么要这样写?
这种写法主要适用于上面代码中的 T 也需要在 module 中被使用的情况。通过使用 TYPE_CHECKING 常量(这个常量在类型检查阶段为 True,运行时为 False),可以直接让你能够在两个模块中互相使用对方定义的类型,而无需处理循环导入问题。
下面是一个实际例子:
# workspace.py

from . import DTOBase
from typing import TYPE_CHECKING

if TYPE_CHECKING:
...