python - 如何将数据类的属性注释为另一个数据类的对象?
问题描述
我有两个数据类,例如:
from dataclasses import dataclass
from pathlib import Path
@dataclass
class InnerDataClass:
host: str
@dataclass
class OuterDataClass:
directory: Path
host: InnerDataClass
当我调用 时OuterDataClass(...)
,PythonNameError: name 'InnerDataClass' is not defined
在最后一行返回错误。为什么会这样,我该如何解决?
解决方案
您的示例实际上有效,您的实际代码中可能有相反的类顺序。Python 代码文件逐行执行,所以当第一个类的类主体被执行时,第二个类需要已经存在。如果你想让事情正常工作,你必须按照从下到上匹配其内部层次结构的顺序声明类。
但是,如果您所做的只是注释而不是实际创建实例,您也可以这样做:
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
@dataclass
class OuterDataClass:
directory: Path
host: InnerDataClass
@dataclass
class InnerDataClass:
host: str
作为代码文件的第一行运行from __future__ import annotations
将使注释工作,无论定义的顺序类如何。它作为PEP 563被引入以帮助解决循环依赖等问题。
推荐阅读
- java - 如何为原生代码构建 Docker 多架构镜像
- python - 如何读取 scipy 层次集群的内容
- spring - @Primary 数据源未在测试中获取
- xml - 过滤节点并加入其他元素以获得标题
- prolog - 一阶逻辑和自动定理证明
- ssl - 默认 Heroku/Streamlit 到 HTTPS/SSL?
- docker - 禁用 cgo 以使 golang:alpine 工作有任何风险吗?
- node.js - 使用 node.js 中的设置间隔在长时间运行的异步函数期间报告(后端服务)
- python - 人脸检测仅需 1 秒
- docker - 取消作业后,Gitlab-Runner 实例卡在“向协调员提交作业”