[Pyrex] exposing extension class attributes
    Robert Bradshaw 
    robertwb at math.washington.edu
       
    Tue Mar 18 23:41:45 CET 2008
    
    
  
On Mar 18, 2008, at 10:55 AM, Simon Burton wrote:
>
> I am considering using some kind of name convention to distinguish  
> between
> extension class access at the python and at the c level:
>
> cdef class Foo:
>
>     cdef int _foo
>
>     def __init__(self, int foo):
>         self._foo = foo
>
>     property foo:
>         def __get__(self):
>             return self._foo
>
>
> Ie. the c attribute has an underscore in front of it, and
> from python the attribute is without underscore.
>
> As this is likely to drive me moderately crazy (keeping track
> of underscores) I am wondering how other people handle this issue ?
Declare foo as public or readonly (e.g. cdef public int foo or cdef  
readonly int foo). Pyrex/Cython will then create the get/set property  
methods for you.
> I guess I am just trying to write C code without writing C code (or  
> C++ code).
> Perhaps I can abandon (exposing these classes to) the python  
> interpreter altogether,
> and stick to writing pyrex code.
>
> A similar problem occurs with methods. I gave up on duplicating  
> every method
> (a cdef version and a python version), and am just using python  
> methods for now.
Cython has "cpdef" methods that does this for you--if you call it  
from C it's a cdef method, if you call it from Python it's a def  
method. These can be overridden in the usual way and it does all the  
right stuff.
- Robert
    
    
More information about the Pyrex
mailing list