[Python-Dev] Things to Know About Super (original) (raw)

Joel Bender jjb5 at cornell.edu
Thu Aug 28 20:36:00 CEST 2008


Greg,

Do you have a real-life example of this where multiple inheritance is actually used?

I have built a framework that I have called the "capability pattern" which uses multiple inheritance in a way that might be unique (I'm not familiar enough with other frameworks to know for sure).

There are two classes, a Collector and a Capability. The result of calling a function of the collector is a list of results of calling the functions of the bound capabilities. For example, these three are capability classes:

 class X(Capability):
     def f(self): return 'X.f'

 class Y(Capability):
     def g(self): return 'Y.g'

 class Z(Capability):
     def f(self): return 'Z.f'
     def g(self): return 'Z.g'

Now to create a sample collector:

 class A(Collector, X, Y, Z): pass

Calling A().f() returns ['X.f', 'Z.f'].

I use this pattern in a web application. The do_GET call is mapped into do_SHOW, and each 'capability' can return something from its do_SHOW (usually a

element) and the results are sent back to the user. In my case I have lots of combinations of capabilities that can be mixed together.

I decided to use multiple inheritance over other patterns because I wanted to leverage isinstance(obj,Y) to indicate that some object has some capability, and not having to duplicate the method resolution order code for other kinds of methods is really nice.

A non-contrived example or two would be a good thing to have in tutorials etc. where super() is discussed. It would help to convey the kinds of situations in which use of super() is and is not appropriate.

So this is a collection of cooperative classes, and super() isn't used.

Joel



More information about the Python-Dev mailing list