Designing for Inheritance

Don O'Donnell donod at home.com
Thu Dec 13 08:13:32 CET 2001


"nspies.geo" wrote:

<cut>
> 
> The problem is thus: how do I design the base class so that it will
> create an extracted object of the correct type, even if it's been
> inherited?  It may well be that the inherited class needs to wrap the
> base class function, but I do not wish to re-write the function in
> every base class.
> 
> Here it is in code.
> 
> --
> 
> class BaseAlignment:
>    def extractx(self, x):
>       extraction = BaseAlignment()
>       extraction = self.data[0:x]
> 
>       return extraction
> 
> class InheritedAlignment(BaseAlignment):
>    def extractx(self, x):
>       BaseAlignment.extractx(self, x)
> 
>       #do something more here...
> 
>       return extraction
> 
> --
> 
> The problem is that the return value of extractx from
> InheritedAlignment is a BaseAlignment.... 

<cut>

> Any hints?

Sure.  Instead of using a fixed identifier for the base class name, 
use the variable self.__class__ instead:

class BaseAlignment:
    def extractx(self, x):
        extraction = self.__class__()
        ...

Now if self is actually an instance of subclass InheritedAlignment,
extraction will also be an instance of subclass InheritedAlignment.
> 
> Thanks,

No problem.  Hope this is what you are looking for.

Cheers,
Don



More information about the Python-list mailing list