如何在Python中创建不可变对象?
虽然我从来没有需要这个,但让我感到震惊的是在Python中创建一个不可变对象可能会有点棘手。你不能只是覆盖__setattr__
,因为那时你甚至不能设置属性__init__
。对元组进行子类化是一种有效的技巧:
class Immutable(tuple): def __new__(cls, a, b): return tuple.__new__(cls, (a, b)) @property def a(self): return self[0] @property def b(self): return self[1] def __str__(self): return "<Immutable {0}, {1}>".format(self.a, self.b) def __setattr__(self, *ignored): raise NotImplementedError def __delattr__(self, *ignored): raise NotImplementedError
但是你可以通过和访问a
和b
变量,这很烦人。self[0]
self[1]
这在纯Python中是否可行?如果没有,我将如何使用C扩展?
(只能在Python 3中使用的答案是可以接受的)。
更新:
因此,子类的元组是做纯Python,效果很好,除了通过访问数据的另一种可能性的方式[0]
,[1]
等等。所以,要完成这个问题,所有这一切都缺少的是HOWTO在C,做“正确的”,这我怀疑是非常简单,只是没有实现任何geititem
或setattribute
等等。但我不是自己做,我为此提供赏金,因为我很懒。:)
素胚勾勒不出你
相关分类