How to make an immutable instance
Leif K-Brooks
eurleif at ecritters.biz
Thu Jun 17 19:00:16 EDT 2004
Batista, Facundo wrote:
> So, if you use this "immutable" class in a dict, and then you (on purpose)
> modify it, you'll have different hashes.
>
> Said that, how safer is this approach? Is there a better way?
The best I know of is this:
class Foo(object):
__slots__ = ('x',)
# __new__ is used instead of __init__ so that no one can call
# __new__ directly and change the value later.
def __new__(cls, value):
self = object.__new__(cls)
self.x = value
return self
def __setattr__(self, attr, value):
if attr in self.__slots__ and not hasattr(self, attr):
object.__setattr__(self, attr, value)
else:
raise AttributeError, "This object is immutable."
But note that you can still use object.__setattr__ directly to get
around it. I don't think there's a way to get true immutability in pure
Python.
More information about the Python-list
mailing list