You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修复Python dataclass中‘NameError: name 'field' is not defined’错误

解决 NameError: name 'field' is not defined 问题

嘿,我来帮你搞定这个错误!你的代码里有两个小疏漏导致了这个问题,还有个关于Python版本的细节需要注意:

  1. field 没导入fielddataclasses 模块里的工具函数,但你只导入了 dataclass 装饰器,没把它一起导进来;
  2. 类型标注的 List 没导入:在Python 3.9之前,类型提示里的列表类型需要从 typing 模块导入 List,你用的3.6.4版本必须这么做;
  3. 额外提醒: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

火山引擎 最新活动