tags:

views:

112

answers:

2

Can I make a class inherit a class "in-program" in Python?

heres what i have so far:

base = list(cls.__bases__)
base.insert(0, ClassToAdd )
base = tuple( base )
cls = type( cls.__name__, base, dict(cls.__dict__) )
+1  A: 

Yes, the type() built-in function has a three argument form that can do this:

type(name, bases, dict)

Return a new type object. This is essentially a dynamic form of the class statement. The name string is the class name and becomes the __name__ attribute; the bases tuple itemizes the base classes and becomes the __bases__ attribute; and the dict dictionary is the namespace containing definitions for class body and becomes the __dict__ attribute.

Greg Hewgill
thx, how do i maintain the current structure?
Timmy
An example would be nice.
grokus
+3  A: 

Here is an example, using Greg Hewgill's suggestion:

class Foo(object):
    def beep(self):
        print('Hi')

class Bar(object):
    x=1  

bar=Bar()
# bar.beep()
# AttributeError: 'Bar' object has no attribute 'beep'

Bar=type('Bar',(Foo,object),Bar.__dict__.copy())
bar.__class__=Bar
bar.beep()
# Hi
unutbu