python用vscode编程关于类型注释引用后续类型的小技巧

发布时间 2023-07-14 11:02:15作者: 顺其自然,道法自然

python的类型注释还是很方便的, 相当于动态语言中增加类型系统, 很方便支持代码自动补全.
但是它毕竟不是编译型语言, 如果引用的类型在后面定义, 就会出现找不到此类型的提示.
这时候只需要把这个类型当作字符串就可以了, 不仅不会报错, 仍然还会享受代码补全的好处.
如下所示:

class GlobalVars:
    '''全局变量'''
    Stop = False    # 表示LongRun是否可以停止
    CurTask:'Task' = None   # 表示当前任务, 会随着应用自动保存和恢复
    pass

class Node: pass

class Task:
    '''任务对象'''
    def __init__(self) -> None:
        self.name = ''    # 任务名称
        self.nodesDict:dict[str,Node] = {} # 节点字典, key: node.id, value: Node对象
        self.startNodeIds:list[str] = []  # 起始节点Id的列表
        self.curNodeId:str = None   # 当前节点ID

CurTask变量的类型为Task, 可是这个类是在后面定义的, 直接指定会报错, 只需要把它写成字符串就好了, 并且支持代码补全, 如下图所示:
image