[Tutor] creating a subclass from superclass without __init__
Steven D'Aprano
steve at pearwood.info
Sat Aug 25 03:17:16 CEST 2012
On 25/08/12 06:03, Matt Gregory wrote:
> There are two classes of interest in GDAL - a Dataset which typically
>describes a geospatial raster file and Band which described a single band
> from the Dataset. gdal.Band just raises an AttributeError within __init__,
>but a gdal.Band instance can be created using
>gdal.Dataset.GetRasterBand(bandNum).
What a nasty, horrible, pointless restriction. Is there any reason why you
need to follow it?
> I had wanted to create additional methods on gdal.Band that would allow
>some GIS type operations (e.g. overloading __add__), thus I thought I would
> need a subclass of gdal.Band. So I was unsure of how to get an instance of
>my subclass when the only way I knew how to create an instance of the
>superclass (gdal.Band) was through the call to GetRasterBand().
class Band(object):
def __new__(cls, *args):
return super(Band, cls).__new__(cls, *args)
def __init__(cls, *args):
# Silly booby-trap.
raise AttributeError('not only is this a pointless restriction '
'on how you create instances, but this is the wrong '
'exception type too!')
def GetRasterBand(*args):
return Band.__new__(Band, *args)
class MyBand(Band):
def __init__(self, *args):
# Override the silly booby trap.
pass
def __add__(self, other):
return 'something...'
__rand__ = __add__
Works for me.
> Does that make any sense in relation to my contrived example? In my
> example, I didn't really want to create a Spam instance from the
> SubSpam __new__, I just didn't know how to return a SubSpam instance
> that was forced to go through SpamMaker.make_spam().
I don't think you can, but I don't think you need to.
--
Steven
More information about the Tutor
mailing list