[pyar] Como hacer un objeto inmutable

Mariano Guerra luismarianoguerra en gmail.com
Vie Oct 28 04:20:29 ART 2011


2011/10/28 Alejandro Santos <listas en alejolp.com>:
> 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?

aca va una con closures

def ReadOnlyPoint(xx, yy):

        class Point(object):
                def get_x(self):
                        return xx

                def get_y(self):
                        return yy

                x = property(get_x)
                y = property(get_y)

        return Point()

>>> from point import *
>>> p = ReadOnlyPoint(1,2)
>>> p.x
1
>>> p.y
2
>>> dir(p)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'get_x',
'get_y', 'x', 'y']
>>> p.y = 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute



More information about the pyar mailing list