You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为引用自身类的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:51:37