On Mar 25, 2008, at 1:05 PM, David J. C. Beach wrote:

> Cython developers,
>
> I knew about Pyrex a few years ago but only recently discovered
> Cython.  I'm very glad to see that there is an active community
> involved in adding these features to Pyrex.

Thanks.

> I've been trying to cut my teeth on Pyrex/Cython by writing a few
> extension types, and have encountered some confusion about whether the
> "self" argument needs to be given an explicit type.  This short
> example illustrates my confusion:
>
> cdef class IntBox:
>
>      cdef int _data
>
>      def __init__(self, int value=0):
>          self._data = value
>
>      def __add__(IntBox self, IntBox other not None):
>          cdef IntBox result = IntBox(self._data + other._data)
>          return result
>
>      def __repr__(self):
>          return str(self._data)
>
>
> In this code, the __init__() and __repr__() methods have no problem
> accessing self._data.
>
> However, if I exclude the "IntBox" type before the self argument in
> the __add__() method, the code doesn't run.  (It fails at runtime by
> saying that it is unable to access the member "_data".  (Presumably,
> this is because Cython compiled it as a python dictionary attribute
> lookup, instead of using the cdef'd storage.)
>
> My questions are:
>
> - Why am I seeing this behavior?
> - What is the best practice concerning the "typing" of the self
> parameter?  Should I always write "IntBox self" as the first argument
> to each method of the IntBox class?  (Even though it appears to only
> be *sometimes* necessary?)
>
> Thank you for your help in this confusing matter.

See the "arithmatic operators" at http://www.cosc.canterbury.ac.nz/ 
greg.ewing/python/Pyrex/version/Doc/Manual/special_methods.html .  
This is because of the nature of the Python/C API, and though there's  
talk of emulating the __add__/__radd__ paradigm of Python it's  
unclear how one would do so.

Self is always the right type otherwise.

- Robert

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to