[pyar] Como hacer un objeto inmutable

Alejandro Santos listas en alejolp.com
Vie Oct 28 01:28:16 ART 2011


Sin usar tuplas, namedtuples[1] ni extensiones en C, ¿cómo puedo hacer
mi propio tipo de datos cuyas instancias sean inmutables garantizadas
por el lenguaje? ¿es posible hacerlo usando clases, magia de
decoradores y nada más?

Hasta ahora llegué acá:

>>> class ReadOnlyPoint(object):
...     __slots__ = ('_x', '_y')
...     def __init__(self, x, y):
...             self._x = x
...             self._y = y
...     def getx(self):
...             return self._x
...     def gety(self):
...             return self._y
...     x = property(getx)
...     y = property(gety)
...
>>> p = ReadOnlyPoint(2, 3)
>>> print p.x, p.y
2 3
>>> p.x = 9
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
>>> p._x = 9
>>> print p.x, p.y
9 3

[1] http://docs.python.org/library/collections.html#collections.namedtuple

-- 
Alejandro Santos



More information about the pyar mailing list