This is a rather simplistic example, but you may be able to use a mixin class to achieve what you need. The idea is that you write a class that overrides only what is needed to add the new functionality. For you it would be Color.
[code] class Graph(object): def _foo(self): print "Graph._foo" class Color(object): def _foo(self): print "Color._foo" class Circle(Graph): def bar(self): self._foo() class ColorCircle(Color,Circle): # the order of parent classes is important pass if __name__ == "__main__": c1 = Circle() c2 = ColorCircle() c1.bar() #prints: Graph._foo c2.bar() #pritns: Color._foo [/code] You might not have to do anything already. Try this and see if it works: [code] ColorCircle(ColorGraph,Circle): pass [/code] Note that you will probably have to create an __init__ method, and explicitly call the __init__ methods for the base classes. If the __init__ for Circle ends up calling the __init__ method from Graph, you may have issues. That is why the Color mixin that I created inherited from object not Graph. It helps to avoid clashing __init__ methods. Matt -- http://mail.python.org/mailman/listinfo/python-list