On, Wed Jan 11, 2006, altern wrote: [...] > So i am trying to find solutions to this but so far the only way it is > too completely overwrite the setter and getter and create again the > property() in the subclass. So i have to repeat all the code from the > superclass ... I also tried some hacks. They kind of work but they feel > to me like too weird to be a good solution. > > Could anyone suggest some nicer way to be able to extend those inherited > methods while still using the property() system? I had the same issue and besides the usage of meta classes, overriding the set_X() methods in the subclasses, rebinding the property in the subclass, etc. I discovered an easy way of accomplishing what you want by using lambda: class Foo: def set_X (self, x): ... def get_X (self): ... x = property (lambda self: self.get_X (), lambda self, var: self.set_X (var), ...) The second var argument in the setter is important here to receive the wanted assignment value, os do not forget it ;-). This also works fine in a similar way with multiple arguments: x = property (lambda self: self.get_X (), lambda self, (var1, var2): self.set_X (var1, var2), ...) The property then would allow something like that: foo_instance.x = "foo", "bar" You can safely override the set_X(), get_X() methods in a subclass without worrying about the property anymore (as it is resolved at runtime). Because of this a small runtime overhead might occur, but I could not measure it for now. Regards Marcus
Attachment:
pgpQP65EzpPMs.pgp
Description: PGP signature