python - 周围有非递归的 dataclass.astuple 吗?
问题描述
dataclasses.astuple
是递归的(根据文档):
每个数据类都转换为其字段值的元组。数据类、字典、列表和元组被递归到。
确实,考虑示例:
In [1]: from dataclasses import dataclass, astuple
...: from typing import List
...:
...: @dataclass
...: class Point:
...: x: float
...: y: float
...:
...: @dataclass
...: class Side:
...: left: Point
...: right: Point
...:
...: side = Side(Point(2, 3), Point(1, 2))
...: astuple(side)
...:
...:
Out[1]: ((2, 3), (1, 2))
是否有任何简单的内置方法来获得二元组的点(Point(x=2, y=3), Point(x=1, y=2))
?
解决方案
没有预先构建的方法来解压缩dataclass
. 但是,它可以很容易地定义:
from dataclasses import fields
def unpack(dc) -> tuple:
return tuple(getattr(dc, field.name) for field in fields(dc))
这可以将任何解包dataclass
到一个元组:
>>> unpack(side)
(Point(x=2, y=3), Point(x=1, y=2))
推荐阅读
- c# - 如何访问模板生成的元素 wpf
- javascript - 为什么我制作的这个命令历史不起作用?
- javascript - jQuery 文件已保存但在浏览器中未更改
- azure-devops - 如何在 Azure DevOps 分析中为 Sprint 和董事会计算特定指标
- java - 如何使用一个表中的数据作为参考来使用 Firebase 获取另一个表中的另一个数据?
- python - 如何在链接验证后重定向用户以在 aws cognito 中拥有自定义 UI?
- scala - 在 k 折验证中的每次迭代/折中获取单个模型分数
- vue.js - 具有本地数据源(客户端)的vue js中剑道网格中的分页
- react-native - React Native TextInput:可以设置下划线长度吗?
- javascript - NodeJS,fs.copyFileSync 不工作且不抛出错误