我正在尝试构建一个 @dataclass
它定义了一个模式,但实际上并没有用给定的成员实例化。 (基本上,我劫持了方便的 @dataclass
语法用于其他目的)。这几乎可以满足我的要求:
@dataclass(frozen=True, init=False)
class Tricky:
thing1: int
thing2: str
def __init__(self, thing3):
self.thing3 = thing3
但是我在 __init__
方法中得到了 FrozenInstanceError
--- :
dataclasses.FrozenInstanceError: cannot assign to field 'thing3'
我需要 frozen=True
(用于散列性)。有什么方法可以在冻结的 --- 中设置自定义属性 __init__
@dataclass
?
原文由 Sasgorilla 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是 默认的
__init__
实现使用object.__setattr__()
和冻结类,通过提供你自己的实现,你也必须使用它,这会使你的代码非常 hacky:不幸的是,python 不提供使用默认实现的方法,因此我们不能简单地执行以下操作:
但是,我们可以很容易地实现该行为:
接着
_更新_:我打开 了这个 错误,我希望在 3.9 之前实现它。