Lisandro Dalcin, 03.12.2010 19:39: > On 3 December 2010 15:10, Stefan Behnel wrote: >> I just implemented C access to the fields of CPython's builtin types like >> this: >> >> cdef complex c = 1+2j >> c.real, c.imag = 10, 20 >> print (c.real, c.imag) >> >> and then noticed that "real" and "imag" are actually read-only in Python. >> So I wonder if we should disallow the above (i.e. raise a compiler error >> during type analysis) and instead only allow this: >> >> cdef complex c = 1+2j >> cval =&c.cval >> cval.real, cval.imag = 10, 20 >> print (c.real, c.imag) >> >> (which also works now, BTW). >> >> Opinions? > > No! No! No! > > In Python, you cannot assign to real or imag simply because the > complex is immutable (like Python ints and floats). For C types, > immutability does not apply!
I understand that. However, I hope that you are talking about the builtin Python complex type just like I am. Given that these two fields carry the same name as the Python visible attributes, this introduces behaviour that diverges from CPython's own behaviour. Making these fields mutable means that you will get an exception when you modify the field in CPython but a straight value update after you compiled your code. Would it be so bad to require c.cval.real = 3.3 instead of c.real = 3.3 if you *really* think you must change the value of an immutable complex object? BTW, the main reason why I implemented was the (mutable) slice type, not so much the complex type. Stefan _______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev