multiple extensions to a class

David Fraser davidf at sjsoft.com
Fri Jul 9 06:05:09 EDT 2004


Humpty Dumpty wrote:
> Hello, I'm experimenting with different ways of extending a class (for a
> plug-ins framework for a GUI) with more than one extension when some of
> these extensions need to collaborate, but others mustn't know about each
> other.
> 
> I.e.,  if I have a class A, and I want to add a block of functionality, I
> can derive it into a B that adds that fucntionality. If I want to add more
> functionality, I can derive B into a C. But if I want to add a third bit of
> functionality D directly to A, such that D knows nothing about B or C, I
> won't be able to instantiate an object that has all three extensions, namely
> an "ABCD". It will either be an "ABC" or an "AD".
> 
> One possibility would be to define the extensions B,C and D as functions and
> add those functions to A with new.instancemethod. Any other ideas on how to
> do this? E.g. is it possible to *add* base classes to a class? I could add
> the extensions by adding them as base classes to A.
> 
> Thanks,
> Oliver
> 
> 
> 

I do a template class using a function:

def B(baseclass):
   class B(baseclass):
     def f(self, x, y):
       # do stuff
       super(B, self).f(x, y)
   return B

def C(baseclass):
   class C(baseclass):
     def f(self, x, y):
       # do stuff
       super(C, self).f(x, y)
   return C

extendedA = C(B(A))
extendedA.f(3,4)

I think you can find recipes like this in the Python cookbook...

David



More information about the Python-list mailing list