【发布时间】:2021-01-19 05:27:29
【问题描述】:
我发现使用冻结数据类是make Python objects immutable 最干净的解决方案。添加单个类装饰器的实现非常简单:
from dataclasses import dataclass
@dataclass(frozen=True)
class Immutable:
attr1: int
attr2: int
现在我想通过引入一个新属性attr3 来扩展Immutable 类:
class MyImmutableChild(Immutable):
attr3: int
但是,行为并不像预期的那样:
>>> immutable_obj = MyImmutableChild(attr1=1, attr2=3, attr3=5)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-2b6c18366721> in <module>
----> 1 immutable_obj = MyImmutableChild(attr1=1, attr2=3, attr3=5)
TypeError: __init__() got an unexpected keyword argument 'attr3'
【问题讨论】: