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