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

Reply via email to