【发布时间】:2019-04-17 20:47:38
【问题描述】:
当用frozen=False(默认行为)定义一个数据类,然后实例化这个类的一个对象时,有没有办法使这个对象可散列?
我为什么需要这个?
在 Python 3.7 之前,我使用命名元组而不是数据类,我曾经使用 set() 查找重复项,但我不能再使用它了。
出于其他原因,我不想在数据类上使用frozen=True。
【问题讨论】:
-
什么“其他原因”?如果你想要哈希,你几乎总是想要冻结
-
@wim 因为在一种情况下,我需要数据类的可变性来修改属性,而在另一种情况下,我需要比较这些对象的 2 个列表之间的相等性。也许我可以编写 2 个具有相同属性的不同数据类,但一个冻结,另一个不冻结?
-
@DavidD.:听起来你可能对
dataclasses.replace感兴趣。 -
是的!我刚刚看到dataclasses.astuple 也可以做到这一点