Vitja Makarov, 24.08.2011 21:17:
2011/8/24 Stefan Behnel:
Vitja Makarov, 24.08.2011 21:00:

Recently I used cython in my project and I came with idea that
sometimes virtual methods are overkill.

What's about adding non-virtual decorator for c[p]def methods?

cdef class Foo:
      @cython.nonvirtual
      cpdef int is_active(self):
              return clib.obj_is_active(self._cobj)

How does that differ from the "final" decorator?


I tried final classes:
1. Final decorator doesn't work at pxd level (compiler crash)

Sounds like a bug.


2. In this example foo call is done through virtual table

cimport cython

@cython.final
cdef class Foo:
     cdef foo(self):
         print 'haha'

def test():
     cdef Foo a = Foo()
     a.foo()

   __pyx_t_1 = ((struct __pyx_vtabstruct_3yyy_Foo
*)__pyx_v_a->__pyx_vtab)->foo(__pyx_v_a); if (unlikely(!__pyx_t_1))
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno =
__LINE__; goto __pyx_L1_error;}

Right, this is not implemented yet. Feel free to do so. Also see

http://trac.cython.org/cython_trac/ticket/474


3. I can't use final decorator for methods (error reported)

http://trac.cython.org/cython_trac/ticket/586

Stefan
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to