вызов cdef в классе cdef - PullRequest
3 голосов
/ 15 марта 2010

есть ли какой-нибудь способ заставить это работать, не жертвуя cdef в cdef caller? (также не использовать cpdef)

from array import *
from numpy import *
cdef class Agents:
    cdef public caller(self):
        print "caller"
        A[1].called()

    cdef called(self):
        print "called"


A = [Agents() for i in range(2)]

def main():
    A[0].caller()

1 Ответ

4 голосов
/ 04 марта 2011

Для Cython A [1] будет объектом python. Если вы хотите иметь возможность использовать cdef, используйте автоматическое приведение к вызывающей стороне:

cdef public caller(self):
    cdef Agents agent
    print "caller"
    agent = A[1]
    agent.called()

Вы можете проверить с помощью режима -a в cython, чтобы узнать, используете ли вы Python или C для кода каждой строки. (cython -a yourfile.pyx -> сгенерирует yourfile.html, который вы можете просмотреть и проверить).

...