[Python-Dev] Things to Know About Super (original) (raw)
Joel Bender jjb5 at cornell.edu
Thu Aug 28 20:36:00 CEST 2008
- Previous message: [Python-Dev] Things to Know About Super
- Next message: [Python-Dev] Things to Know About Super
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
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
- Previous message: [Python-Dev] Things to Know About Super
- Next message: [Python-Dev] Things to Know About Super
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]