design question, metaclasses?

Darren Dale dsdale24 at gmail.com
Sun Apr 12 14:30:51 EDT 2009


On Apr 11, 2:15 pm, Darren Dale <dsdal... at gmail.com> wrote:
> I am working on a project that provides a high level interface to hdf5
> files by implementing a thin wrapper around h5py. I would like to
> generalize the project so the same API can be used with other formats,
> like netcdf or ascii files. The format specific code exists in File,
> Group and Dataset classes, which I could reimplement for each format.
> But there are other classes deriving from Group and Dataset which do
> not contain any format-specific code, and I would like to find a way
> to implement the functionality once and apply uniformly across
> supported formats. This is really abstract, but I was thinking of
> something along the lines of:
>
> format1.Group # implementation of group in format1
> format2.Group # ...
> Base.DerivedGroup # base implementation of DerivedGroup, not directly
> useful
> format1.DerivedGroup = Base.DerivedGroup(format1.Group) # useful
> format2.DerivedGroup = Base.DerivedGroup(format2.Group) # useful
>
> Could anyone please offer a comment, is this an appropriate use of
> metaclassing, or is there maybe an easier/better alternative?

I don't fully understand metaclasses, but I think I have convinced
myself that they are not what I was looking for. I think this will do
what I want it to:

class Group1(object):

    def origin(self):
        return "Group1"


class Group2(object):

    def origin(self):
        return "Group2"


def _SubGroup(superclass):

    class SubGroup(superclass):
        pass

    return SubGroup


SubGroup = _SubGroup(Group2)
sub_group = SubGroup()

print sub_group.origin()



More information about the Python-list mailing list