manatlan a écrit : > I've got an instance of a class, ex : > > b=gtk.Button() > > I'd like to add methods and attributes to my instance "b". > I know it's possible by hacking "b" with setattr() methods.
You don't even need setattr() here, you can set the attributes directly. > But i'd > like to do it with inheritance, a kind of "dynamic subclassing", > without subclassing the class, only this instance "b" ! > > In fact, i've got my instance "b", and another class "MoreMethods" > > class MoreMethods: > def sayHello(self): > print "hello" > > How could i write ... > > "b = b + MoreMethods" > > so "b" will continue to be a gtk.Button, + methods/attributs of > MoreMethods (it's what i call "dynamic inheritance") ...so, things > like this should work : > > - b.set_label("k") > - b.sayHello() > > I can't find the trick, but i'm pretty sure it's possible in an easy > way. You don't necessarily need subclassing here. What you want is a typical use case of the Decorator pattern: class MoreMethods(object): def __init__(self, button): self._button = button def sayHello(self): print "hello" def __getattr__(self, name): return getattr(self._button, name) def __setattr__(self, name, value): if name in dir(self._button): setattr(self._button, name, value) else: object.__setattr__(self, name, value) b = MoreMethods(gtk.Button()) b.set_label("k") b.say_hello() -- http://mail.python.org/mailman/listinfo/python-list