inheritance?

Steven D'Aprano steve at REMOVEME.cybersource.com.au
Wed Aug 16 00:16:16 EDT 2006


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?



-- 
Steven D'Aprano 




More information about the Python-list mailing list