Python 中的不可变对象:超越基本解决方案
虽然标准元组类提供了不可变性,但本文探讨了创建不可变对象的更高级技术
重写 __setattr__:一种有限的方法
一个常见的解决方案是重写 setattr 方法。但是,即使在 init 函数中,这也会阻止属性设置。因此,它可能并不适合所有场景。
子类化元组:部分解决方案
另一种方法是子类化元组,提供自定义new 用于访问属性的方法和属性。然而,这种方法并不能完全阻止通过 self[0] 和 self[1] 进行属性访问,这可能会很不方便。
namedtuple 解决方案:简单性和兼容性
一个更简单、更健壮的解决方案是使用Python集合模块中的namedtuple类:
Immutable = collections.namedtuple("Immutable", ["a", "b"])
与之前的技术类似,这创建了一个从元组派生的类型并使用 __slots__。它具有几个优点:
结论
namedtuple 类提供了一种在 Python 中创建不可变对象的便捷高效的方法。它是 более 先进技术的可行替代方案,并提供额外的好处,例如序列化兼容性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3