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 <div> 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
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com