Those are good ideas. thanks Lisandro!
On Tue, May 19, 2009 at 8:08 PM, Lisandro Dalcin <dalc...@gmail.com> wrote: > Not sure is this will help you, but perhaps you could define your > __cinit__() to have an empty image (perhaps with a NULL pointer), and > then define some creational methods, then you could do from Python > side > > img1 = Image() > img1.createFromFileData(filename) > > img2 = Image() > img2.createFromNumpyData(numpy_array) > > img3 = Image() > img4.createFromStringData(python_byte_string) > > > Other way could be do define static/class factory methods, and then you do > > img1 = Image.createFromFileData(filename) > > img2 = Image.createFromNumpyData(numpy_array) > > img4 = Image.createFromStringData(python_byte_string) > > The two alternatives are rather similar, however, the second has some > conveniences. > > A BIG problem with the fist option is that if you let a Python > instance to have a NULL pointer, then you will need to check against > that NULL on almost every other method call calling you C lib > routines, if not, you could potentially get nasty segfaults. > > By using the second patter, you can restrict Python instances to > always have a non-NULL, valid handle to a C-side, then you can code > your methods with prior knowledge that the handle is a valid one... > > In short, all this is in general a matter of personal style and > preferences. I would perhaps follow option 2, I mean, define some > factory @classmethod's you call from Python side to create images from > the many sources... > > > > > On Tue, May 19, 2009 at 6:22 PM, Chris Colbert <sccolb...@gmail.com> > wrote: > > True, but it seems a little "off" to programatically set every attribute > one > > by one every time i create an instance of that type. > > > > Is it not recommended to declare a property for every attribute I want > > access from in python? > > > > Chris > > > > On Tue, May 19, 2009 at 5:17 PM, Robert Bradshaw > > <rober...@math.washington.edu> wrote: > >> > >> On May 19, 2009, at 2:02 PM, Chris Colbert wrote: > >> > >> > What you can do is allow it to pass in a char* (bytes) object with a > >> > length, have a cdef set method, use opaque object pointer wrappers > >> > (there was a previous thread about this). > >> > > >> > i'm not sure I understand what your saying with this ^^^ > >> > > >> > You could also make a function > >> > > >> > > def testload(filename): > >> > > cdef IplImage* img = load(filename) > >> > > cdef PyIplImage pyimg = PyIplImage > >> > > pyimg.img = img > >> > > return pyimg > >> > > >> > this makes sense. Just instantiate an empty PyIplImage then set the > >> > pointer after instantiation. But that would mean all attributes > >> > (width, height, etc) would have to be accessed as properties right? > >> > since I wouldn't be able to set them on __init___ > >> > >> You can set readonly attributes from C. > >> > >> - Robert > >> > >> > >> _______________________________________________ > >> Cython-dev mailing list > >> Cython-dev@codespeak.net > >> http://codespeak.net/mailman/listinfo/cython-dev > > > > > > _______________________________________________ > > Cython-dev mailing list > > Cython-dev@codespeak.net > > http://codespeak.net/mailman/listinfo/cython-dev > > > > > > > > -- > Lisandro Dalcín > --------------- > Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC) > Instituto de Desarrollo Tecnológico para la Industria Química (INTEC) > Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET) > PTLC - Güemes 3450, (3000) Santa Fe, Argentina > Tel/Fax: +54-(0)342-451.1594 > _______________________________________________ > Cython-dev mailing list > Cython-dev@codespeak.net > http://codespeak.net/mailman/listinfo/cython-dev >
_______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev