inheritance?

John Henry john106henry at hotmail.com
Wed Aug 16 13:41:50 EDT 2006


As others pointed out already, this kind of "if then else"
determination of type is best avoided.

If it looks like a duck, quakes like a duck, must be a duck.

KraftDiner wrote:
> Steven D'Aprano wrote:
> > On Tue, 15 Aug 2006 19:35:11 -0700, KraftDiner wrote:
> >
> > > I have two classes:
> > >
> > > class implicitClass:
> > >    def __init__(self):
> > >    def isIVR(self):  #This is a class private method.
> >
> > The convention is to flag classes as "private" with a leading underscore:
> >
> >     def _isIVR(self):
> >
> > or double underscores for "really private, no, honestly":
> >
> >     def __isIVR(self):
> >
> > but google on "python name mangling" before using that.
> >
> > [snip]
> >
> > > As you can see the interface is almost identical.
> > >
> > > How can I define a base class that will abstract
> > > the type such that I don't know if its really and inplicit
> > > or explicit object?
> >
> > Something like this?
> >
> >
> > class baseClass:
> >    def __init__(self):
> >        raise NotImplementedError("Don't instantiate the base class!")
> >    def fromfile(self):
> >    def getElement(self):
> >    # etc.
> >
> >
> > class implicitClass(baseClass):
> >    def __init__(self):
> >        # code
> >    def _isIVR(self):
> >        # code
> >    def fromfile(self, fileObj, byteOrder):
> >        # code
> > # etc.
> >
> > Now, you can define instance = implicitClass() or explicitClass(). When
> > you come to use instance, you don't need to know whether it is one or the
> > other. If you need to type-test, call "isinstance(instance, baseClass)".
> >
> > The only minor issue is that the fromfile method has a different
> > interface. If you really want to do duck typing, they need to have the
> > same interface. That might be as simple as:
> >
> > class explicitClass(baseClass):
> >    def fromfile(self, fileObj, byteOrder=None):
> >        # byteOrder is ignored; it is included only for
> >        # compatibility with implicitClass
> >
> >
> > Is that what you're asking for?
> >
> Yes I believe so but in fromfile I want to call the appropriate
> method depending on the in a parameter in fromfile...
> like:
> class baseClass:
>    def fromfile(self, fileObj, byteOrder=None, explicit=False):
>       if explicit:
>          call fromfile of explicit class
>       else:
>         call fromfile of implicit class
> 
> How is that done?
> 
> 
> > 
> > 
> > -- 
> > Steven D'Aprano




More information about the Python-list mailing list