Bay*_*rSe 6 python python-3.7 python-dataclasses
我想替换数据类实例的属性,类似于namedtuple._replace(),即制作原始对象的更改副本:
from dataclasses import dataclass
from collections import namedtuple
U = namedtuple("U", "x")
@dataclass
class V:
x: int
u = U(x=1)
u_ = u._replace(x=-1)
v = V(x=1)
print(u)
print(u_)
print(v)
Run Code Online (Sandbox Code Playgroud)
返回:
U(x=1)
U(x=-1)
V(x=1)
Run Code Online (Sandbox Code Playgroud)
如何在数据类对象中模仿此功能?
Python数据类模块具有一个公共API,用于在数据类实例上进行字段替换,如此处所述。此功能由模块级帮助程序功能提供:
from dataclasses import replace
Run Code Online (Sandbox Code Playgroud)
用法与的用法不同collections.namedtuple,后者是通过生成的类型上的方法提供此功能的(注: namedtuple._replace已记录/公开。作者将此名称选择为“遗憾”,请参见答案结尾的链接)。
用法示例:
>>> from dataclasses import dataclass, replace
>>> @dataclass
... class V:
... x: int
... y: int
...
>>> v = V(1, 2)
>>> v_ = replace(v, y=42)
>>> v
V(x=1, y=2)
>>> v_
V(x=1, y=42)
Run Code Online (Sandbox Code Playgroud)
有关设计的更多背景信息,请参见PyCon 2018对话-数据类:代码生成器以结束所有代码生成器。该replaceAPI在深度所讨论的,与之间的其它设计差异沿namedtuple与dataclasses一些性能比较以及。
| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |