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