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.
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.
And thank you for your development of Cython.
David
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev