Hi all, We've been breaking our heads over a good way of accomplishing an "on_load" event in our multitouch GUI frameowork PyMT. We think we'd like to trigger an "on_load" event after a class is fully instantiated (or just a function call for simplicity, so you dont need to worry about our specific system). This is so that if I make a subclass of some widget, I dont have to overwrite the __init__ method (use super, know the args, and pass them) everytime. Maybe I just want to do some really basic stuff that doesn't really have anything to do with the parent class.
Anyway. My first attempt was to simply put a call to self.on_load at the end of the widget base class. This doesn't work though, because, if I subclass it and do things after the call to super.__init__, on_load will be called before the constructor finishes (when the top most parent class __init__ finishes) We've sort of managed to achieve this by using a decorator that changes the __init__ function. but even this doesnt seem like the best way to do this. a) I now have to decorate every constructor i ever write. b) it seems impossible to make it so that it only happens once after the object is actually instantiated (since i have a decorator on all my constructors..each constructor in the inheritance line will call on_load once) Can I do something fancy with metaclasses here? I think I could kind of do this by making all my classes use __new__, and then essentially use __init__ as what i want on_load to be...but that just seems really nasty and unpythonic. not to speak about the confusion it would cause with people trying to figure out the library. So any ideas on how to get a function called on an object just after __init__ is done executing? -- http://mail.python.org/mailman/listinfo/python-list