On Tue, Jun 03, 2014 at 04:43:29PM -0400, Piergiuliano Bossi wrote:
> 2014-06-03 10:00 GMT-04:00 Marco Giusti <marco.giu...@gmail.com>:
> 
> > > Ho messo alcuni esempi qua sotto. L'opzione #1 e' orrida, ma e' anche
> > > quella che richiede meno copia e incolla.
> >
> > Questo, per me, è sufficiente ad una risposta per essere corretta.
> > Inoltre se il comportamento cambia in base alla (sotto)classe, un metodo
> > è più che giustificato.
> >
> >
> Beh, ma in questo caso volevo limitarmi a una property. Quando vai di
> override preferisci buttare via la property e modellare con metodi?

Simone ha ben riassunto l'utilità delle property: in fase di refactoring
poi trasformare l'accesso ad un attributo in una chiamata a funzione
senza cambiare il codice cliente. Ma se ho la scelta preferisco
modellare con i metodi

Un'altra soluzione è quella di creare una property specifica, ma anche
questa è alquanto poco pulita.


        class PolyProperty(object):

                def __init__(self, getter_name, setter_name):
                        self.getter_name = getter_name
                        self.setter_name = setter_name

                def __get__(self, instance, owner):
                        if instance is None:
                                raise AttributeError()
                        return getattr(instance, self.getter_name)()

                def __set__(self, instance, value):
                        return getattr(instance, self.setter_name)(value)


        class Foo(object):

                _foo = None

                def get_foo(self):
                        return self._foo

                def set_foo(self, value):
                        self._foo = value

                foo = PolyProperty("get_foo", "set_foo")


        class Bar(Foo):

                def set_foo(self, value):
                        Foo.set_foo(self, value * 2)


        f = Foo()
        print f.foo
        f.foo = 42
        print f.foo

        b = Bar()
        print b.foo
        b.foo = 42
        print b.foo


Ciao
m.
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a