On Nov 15, 2008, at 3:39 PM, Benjamin Peterson wrote: > Hi! > > For fun, I have been implementing a Python binding to GMP. I have a > class like > this: > > cdef class GMPInt: > > cdef mpz_t ob_val > .... > def __add__(self, GMPInt other): > cdef mpz_t temp > mpz_init(temp) > mpz_add(temp, self.ob_val, other.ob_val) > mpz_clear(temp) > .... > > When I try to compile it I get this error: > > mpz_add(temp, self.ob_val, other.ob_val) > ^ > ------------------------------------------------------------ > > /temp/sandbox/pygmp/src/_gmp.pyx:49:27: Cannot convert Python > object to 'mpz_t' > > > It compiles correctly when I define a declaration for self in __add__ > like this, though: > > def __add__(GMPInt self, GMPInt other) > > I thought type declarations were supposed to be implicit on self in > classes. Is this just an anomaly? > > I have Cython 0.10. > > Thanks for the help! > --
That is correct most of the time. What you're observing here due to the fact that the __add__ method may take self in either the left or right parameter. (This is how the slot works in extension classes, rather than having a separate __radd__ method.) We really need to add that to http://docs.cython.org/docs/extension_types.html#special-methods - Robert _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
