On Fri, Aug 24, 2012 at 4:03 PM, Matt Gregory <matt.greg...@oregonstate.edu> 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).
SWIG! Why'd it have it be SWIG? C++... very dangerous. You go first. ;) GDAL Usage http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/samples/val_repl.py Proxy Classes Driver http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/osgeo/gdal.py#L355 Dataset http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/osgeo/gdal.py#L647 Band http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/osgeo/gdal.py#L851 SWIG Interfaces http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/include/Driver.i#L31 http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/include/Dataset.i#L308 http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/include/Band.i#L182 http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/include/python/gdal_python.i#L260 _gdal module http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/extensions/gdal_wrap.cpp Open, OpenShared, GetDriver, GetDriverByName, etc return proxies to C++ shadow classes. It doesn't look like the SWIG interface was written for extending the classes in Python (something called "directors" according to the docs). The proxies lack a callable __init__ because the C++ shadow classes have private constructors. Instead, you have calls such as Dataset.GetRasterBand, which calls _gdal.Dataset_GetRasterBand (i.e. the C++ function _wrap_Dataset_GetRasterBand), which calls GDALDatasetShadow_GetRasterBand, which calls GDALGetRasterBand. The result gets cast to a GDALRasterBandShadow*. Finally, Python gets the latter wrapped as a Band proxy. > 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(). I don't see an easy way to do this without modifying the SWIG interface or monkey patching the Python classes. But my knowledge of SWIG is superficial. You should ask this on a more appropriate forum, or Stack Overflow. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor