Dynamic subclassing ?

Alex Martelli aleax at mac.com
Sat May 12 19:24:09 EDT 2007


manatlan <manatlan at gmail.com> wrote:

> 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. 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.

I think what you're asking for is totally weird, and with just about
zero advantages compared with several saner alternatives that have
already been proposed in this thread and that you have rejects, but
sure, it's possible:

def addaclass(aninst, onemoreclass):
    aninst.__class__ = type(aninst.__aclass__.__name__,
            (aninst.__aclass__, onemoreclass), {})


Alex



More information about the Python-list mailing list