【发布时间】:2020-09-09 19:06:04
【问题描述】:
在遇到数据类之前,我将命名元组用于不可变数据结构,在我的用例中我更喜欢使用它(与问题无关)。
现在我了解到它们不是一成不变的!至少严格来说不是。
setattr(frozen_dc_obj, "prop", "value") 引发异常。好的。
但是为什么object.__setattr__(frozen_dc_obj,..) 有效呢?
与引发异常的namedtuple 相比!
from collections import namedtuple
from dataclasses import dataclass
NTTest = namedtuple("NTTest", "id")
nttest = NTTest(1)
setattr(nttest, "id", 2) # Exception
object.__setattr__(nttest, "id", 2) # Exception
@dataclass(frozen=True)
class DCTest:
id: int
dctest = DCTest(1)
setattr(dctest, "id", 2) # Exception
object.__setattr__(dctest, "id", 2) # WORKS
【问题讨论】:
标签: python python-3.x immutability namedtuple python-dataclasses