如何为引用自身类的Python类静态字段添加正确类型注解?
报错原因
执行类体内部代码时,Foo类还未完成定义,当前作用域中不存在Foo这个名称绑定,直接把Foo写在类型注解里会触发名称查找失败。
正确写法
根据使用的Python版本选择对应方案即可:
方案1:Python 3.7+ 通用写法
在文件最开头导入__future__模块的annotations特性,该特性会将文件内所有类型注解转为字符串延迟求值,不会在类定义阶段立刻解析注解里的类名,从根源上避开名称不存在的问题:
from __future__ import annotations from typing import List class Foo: all_of_us: List[Foo] = [] def __init__(self): Foo.all_of_us.append(self)
如果使用Python 3.9及以上版本,不需要导入typing.List,可以直接用内置泛型list写注解,写法更简洁:
from __future__ import annotations class Foo: all_of_us: list[Foo] = [] def __init__(self): Foo.all_of_us.append(self)
方案2:兼容Python 3.7以下版本
如果没法使用__future__的延迟注解特性,可以直接把注解里的类名用引号包裹成字符串字面量,类型检查工具会自动识别这种写法的类型含义,运行时也不会立刻解析该名称:
from typing import List class Foo: all_of_us: List["Foo"] = [] def __init__(self): Foo.all_of_us.append(self)
内容的提问来源于stack exchange,提问作者y.selivonchyk
相关产品推荐
相关产品推荐

