Properties y metodos 'virtuales'

Ernesto Revilla aerd en retemail.es
Sab Ago 31 05:50:12 CEST 2002


Hola,

suponed el siguiente ejemplo para Python 2.2:

class X(object):
    def set_a(self,value):
        self._a=value
    def get_a(self):
        print "leyendo desde X"
        return self._a
    a=property(get_x,set_x)

class Y(X):
    # redefinimos solo el get, extendiéndolo
    def get_a(self):
        print "leyendo desde Y"
        return X.get_a(self)

y=Y()
y.a=20
print "y.a es", y.a

-> Y.get_a no es llamado. porque al establecer property, se ha asignado
directamente una función. Lo que básicamente significa que las llamadas no
son 'virtuales', pero eso va algo en contra de la filosofía de Python. Yo
quiero usarlo en la capa de persistencia, con las propiedades creadas
automáticamente, para que el usuario pueda derivar de las clases generadas y
meter su propio código en los métodos get y set.

Así que reformo la sentencia de clase X para usar expresiones lambda de la
siguiente manera:
    a=property(lambda self: self.get_x(), lambda self,value:
self.set_x(value))

¿Es esa la manera correcta? He leído sobre los métodos __get__, pero no sé
si eso puede servir para algo. (Se supone que se puede heredar de property
para hacer cualquier tipo de cosas.)

Saludos,
Erny

Por cierto, gracias por el vínculo Thinking in Python. Lo estoy estudiando,
tiene temas interesantes.

¿Lo del ObjectDomain R3, no lo ha usado nadie?








Más información sobre la lista de distribución Python-es