Best way to do data source abstraction

bruno at modulix onurb at xiludom.gro
Thu Jun 1 11:20:22 CEST 2006


Arthur Pemberton wrote:
> What is the best way to do data source abtraction? For example have
> different classes with the same interface, but different
> implementations.
> 
> I was thinking of almost having classA as my main class, and have
> classA dynamically "absorb" classFood into to based on the extension
> of the input file received by classA. But this doesn't seem possible.

Could you explain more accurately what you're trying to do ? FWIW, it
seems that a plain old factory function would do ?

class DatasourceAbstraction(object):
  """ base class, factoring common stuff """
  # implementation here

class JpegFile(DatasourceAbstraction):
  # ....


class PdfFile(DatasourceAbstraction):
  # ....

class TxtFile(DatasourceAbstraction):
  # ....

# etc
_classes = {
  'jpg' : JpegFile,
  'txt' : TxtFile,
  'pdf' : PdfFile,
  # etc..
}

def Datasource(inputfile):
  ext = os.path.splitext(inputfile)
  return _classes.get(ext, <SomeDefaultClassHere>)(inputfile)

The fact that there's no 'new' keyword in Python, and that classes are
callable objects acting as factories means that it's a no-brainer to use
a plain function (eventually disguised as a Class - the client code just
doesn't care !-) as factory...

Now if I missed the point, please give more explanations...

-- 
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"



More information about the Python-list mailing list