如何使非冻结数据类冻结,反之亦然?

2024-01-18

我想知道制作数据类的简单方法bar frozen.

@dataclass
class Bar:
    foo: int
bar = Bar(foo=1)

换句话说,我想要一个如下所示的函数some_fn_to_freeze

frozen_bar = some_fn_to_freeze(bar)
frozen_bar.foo = 2 # Error

并且,反函数some_fn_to_unfreeze

bar = som_fn_to_unfrozen(frozen_bar)
bar.foo = 3 # not Error

变异的标准方法frozen数据类是使用dataclasses.replace:

old_bar = Bar(foo=123)
new_bar = dataclasses.replace(old_bar, foo=456)
assert new_bar.foo == 456

对于更复杂的用例,您可以使用以下位置的 dataclass utils 模块:https://github.com/google/etils https://github.com/google/etils

它添加了一个my_dataclass = my_dataclass.unfrozen()成员,允许变异frozen直接数据类

# pip install etils[edc]
from etils import edc

@edc.dataclass(allow_unfrozen=True)  # Add the `unfrozen()`/`frozen` method
@dataclasses.dataclass(frozen=True)
class A:
  x: Any = None
  y: Any = None


old_a = A(x=A(x=A()))

# After a is unfrozen, the updates on nested attributes will be propagated
# to the top-level parent.
a = old_a.unfrozen()
a.x.x.x = 123
a.x.y = 'abc'
a = a.frozen()  # `frozen()` recursively call `dataclasses.replace`

# Only the `unfrozen` object is mutated. Not the original one.
assert a == A(x=A(x=A(x = 123), y='abc'))
assert old_a == A(x=A(x=A()))

如示例所示,您可以返回unfrozen/frozen数据类的副本,它被明确设计为改变嵌套数据类。

@edc.dataclass还添加一个a.replace(**kwargs)数据类的方法(别名为dataclasses.dataclass)

a = A()
a = a.replace(x=123, y=456)
assert a == A(x=123, y=456)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使非冻结数据类冻结,反之亦然? 的相关文章

  • xlrd.biffh.XLRDError:Excel xlsx 文件;不支持[重复]

    这个问题在这里已经有答案了 我正在尝试使用读取启用宏的 Excel 工作表pandas read excel与 xlrd 库 它在本地运行良好 但是当我尝试将其推送到 PCF 时 我收到此错误 2020 12 11T21 09 53 441
  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • 切片稀疏(scipy)矩阵

    我将不胜感激任何帮助 以理解从 scipy sparse 包中切片 lil matrix A 时的以下行为 实际上 我想根据行和列的任意索引列表提取子矩阵 当我使用这两行代码时 x1 A list 1 x2 x1 list 2 一切都很好
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 如何在 PyCharm 4.5.2 中使用 PyPy 作为标准/默认解释器?

    如何在 PyCharm 4 5 2 中使用 PyPy 作为标准 默认解释器 一切都在 Ubunutu 14 10 下运行 并且 pypy 已经安装 您可以在项目的设置下进行配置 这个官方文档直接涵盖了 https www jetbrains
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • pyglet 将屏幕分辨率转换为变量

    有没有任何选项如何获取值height and width使用 pyglet 将屏幕转换为变量 我可以打印它 但无法提取这些值 import pyglet platform pyglet window get platform display
  • 如何平滑matplotlib等高线图?

    I have numpy array with this shape 33 10 When I plot contour I get ugly image like this while contour 似乎没有任何关于平滑或某种插值功能的
  • 在 DataFrame 中按多列条件删除行

    我有一个 pandas 数据框 我试图根据所选列的条件删除行 如果这些选择列中的值为零 则应删除这些行 这是一个例子 import pandas as pd t pd DataFrame a 1 0 0 2 b 1 2 0 0 c 1 2
  • 反编译 Adob​​e AIR 应用程序

    是否有反编译 Adob e AIR 应用程序的工具 我想检查它们在我制作的应用程序上如何工作 打包的 AIR 文件 带有 air 扩展名的文件 是 ZIP 文件 您可以使用任何 ZIP 程序将它们分开 但是 AIR 应用程序可以用 Flas
  • 将sql结果转换为列表python

    我是 python 初学者 我想将 sql 结果转换为列表 这是我的代码 cursor connnect db query SELECT FROM tbl cursor execute query options list for i ro
  • WebGl 将 float 打包到 v4 中

    我有来自 Threejs 示例的代码示例 http twojs org examples webgl animation cloth http threejs org examples webgl animation cloth 5D其中浮
  • Matlab:如何将元胞数组转换为字符串数组?

    我有一个大小为 14676x117 的元胞数组调用myCellArray 我想提取存储在中的值myCellArray 2 14676 1 在字符串数组中 运行下面的脚本仅返回单个字符串值 而不返回字符串数组 gt gt y myCellAr
  • 我应该使用什么 SQL Server 数据类型来存储字节[]

    我想在我的 SQL Server 中存储一个字节数组 您建议使用什么数据类型或预插入操作来存储这些数据 我没想到这些byte 长度超过 1024 varbinary 1024 这就是您正在寻找的 SQL Server 中的二进制值存储有以下
  • Azure Web 应用程序容器和 docker 命令

    我将 Azure 资源 容器的 Web 应用程序 与 Linux docker 映像一起使用 我想使用 docker 命令 例如 dockerspect 但我不确定这是如何实现的 通过 Kudo 界面 这似乎不可能 我什至无法获取当前部署的
  • 禁用选项卡栏项目 - Swift

    如何禁用特定选项卡栏项目 就像第三个图标一样 self tabBarItem items 2 enabled false 一定有一种方法可以完成像单行这样简单的任务吗 上面的不行 这是答案 if let arrayOfTabBarItems
  • C# 从 JSON 响应创建 Deedle DataFrame

    我在将此请求的 JSON 响应加载到 Deedle DataFrame 中时遇到了一些问题 在 JSON 中 我感兴趣的是它的特性 更具体地说 对于每个功能都有属性 我本质上只想将这些属性的集合加载到 DataFrame 中 在这种特殊情况
  • â�� 在我的 purify 后的 html 中

    我有一个数据库 我正在重建表结构 这很糟糕 所以我将一些数据从一个表移植到另一个表 这些数据似乎是从 MSO 产品复制粘贴的 因此当我获取数据时 我使用 htmlpurifier 和 php 中的一些 str replace 对其进行清理
  • 在 Eclipse 中运行时从 pom 获取 Maven 项目版本和工件 ID

    当我遇到这个问题时 我正在寻找如何从 Maven pom 或清单获取应用程序名称 artifact id 和版本在运行时获取 Maven 工件版本 https stackoverflow com questions 2712970 how
  • 基于角色的访问控制(RBAC)关心权限还是角色?

    看完之后http en wikipedia org wiki Role based access control http en wikipedia org wiki Role based access control看到人们构建授权 访问
  • 同时提交多个分支

    我想同时在不同的分支上进行一次提交 因为在我的项目中 我针对不同的客户端有不同的分支 假设我已经在分支 A 上进行了新功能提交 我是否也可以同时在分支 B 分支 C 和 D 上进行此提交 有没有这方面的快捷命令 这样签出一个分支 每次都要c
  • 如何使用 cgmath::Matrix 作为 glium 中的统一参数?

    我正在尝试整合cgmath图书馆进入我的第一个实验glium 但我不知道如何通过我的Matrix4反对draw call My uniforms对象的定义如下 let uniforms uniform matrix cgmath Matri
  • ext js中有列点击事件吗?

    我正在使用 Ext grid gridpanel 在 rowclick 事件中 我们可以处理网格的行单击 是否有任何事件可以处理网格的列单击 我想选择网格的特定列 没有什么特别的columnclick网格面板或选择模型上的事件 但您可以收听
  • ng-click 在使用 ng-bind-html 的控制器内不起作用

    在我的代码下面 ng click 不起作用 当我检查检查元素 ng click 未显示时 请帮助我该怎么做 var app angular module myApp ngSanitize app controller myCtrl func
  • 当最大工作进程数大于 1 时,Web 应用程序运行速度是否更快?

    对于IIS7 当最大工作进程数大于 1 时 Web 应用程序运行速度是否更快 通过将最大工作进程数增加到超过 1 您将创建一个网络花园 所以简短的回答是 可能不会 除非 去引用克里斯 亚当斯 http yuppieredneck com 前
  • 如何使非冻结数据类冻结,反之亦然?

    我想知道制作数据类的简单方法bar frozen dataclass class Bar foo int bar Bar foo 1 换句话说 我想要一个如下所示的函数some fn to freeze frozen bar some fn