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