如何修复Python dataclass中‘NameError: name 'field' is not defined’错误
解决
NameError: name 'field' is not defined 问题 嘿,我来帮你搞定这个错误!你的代码里有两个小疏漏导致了这个问题,还有个关于Python版本的细节需要注意:
field没导入:field是dataclasses模块里的工具函数,但你只导入了dataclass装饰器,没把它一起导进来;- 类型标注的
List没导入:在Python 3.9之前,类型提示里的列表类型需要从typing模块导入List,你用的3.6.4版本必须这么做; - 额外提醒:Python 3.6本身没有内置
dataclasses模块,如果你还没安装它,得先通过pip安装(看下面的命令)。
修复后的完整代码
from dataclasses import dataclass, field from typing import List @dataclass class dots: n: int = 200 xy: List[int] = field(default_factory=list)
为什么要这么改?
- 导入
field后,就能正确生成每个实例独立的空列表了——这里用default_factory=list是关键,要是直接写xy: List[int] = [],所有dots实例会共享同一个列表,这大概率不是你想要的行为; - 导入
typing.List是为了让类型标注在Python 3.6里正常工作,3.9及以后的版本可以直接用内置的list代替,但你的版本还不行。
前置步骤(如果没装dataclasses)
因为Python 3.6没有自带这个模块,先执行下面的命令安装:
pip install dataclasses
现在运行代码应该就没问题啦!
内容的提问来源于stack exchange,提问作者Kathia




