Properties y metodos 'virtuales'

Hernan Martinez Foffani hernan en orgmf.com.ar
Sab Ago 31 20:39:32 CEST 2002


> > en resumen, vos estás queriendo que la llamada a property() de la
> > subclase se haga directamente, sin intervencion del usuario.
> > para ello puedes usar metaclases.
> Bueno, habrá que pensarlo y hacerlo con metaclases.

una posibilidad...

class X(object):
    class __metaclass__(type):
        def __init__(cls, name, bases, dict):
            cls.a = property(cls.get_a, cls.set_a)

    def set_a(self, value):
        self._a = value

    def get_a(self):
        print "X"
        return self._a

class Y(X):
    def get_a(self):
        print "Y"
        return super(Y, self).get_a()

x=X()
x.a=3
print "x.a:", x.a
y=Y()
y.a=20
print "y.a", y.a

Y aún así, el usuario no se puede olvidar de poner el
  return super(Y, self).get_a(self)


> La semántica no está clara con herencia múltiple donde se
> repiten alguna de las propiedades para el caso de get, porque
> sólo puede devolver uno de los valores, creo que el
> primero que encuentre es el que sirve.

super(C, self).metodo(args) se encarga de hacer la resolucion
de la herencia multiple.

-Hernan





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