Ответ 1
Я не думаю, что вы можете (http://docs.cython.org/src/userguide/sharing_declarations.html#sharing-extension-types), но вы можете обойти его, используя __cinit__
, чтобы утверждать, что атрибут имеет правильный тип:
В вашем файле Cython (например, "p.pyx" ):
import my_python_module as q
cdef class Y:
cdef int i
cdef public object x # public so it can be accessed from Python
def __cinit__(self, x_):
assert isinstance(x_, q.X)
self.x = x_
и my_python_module.py
- это то, где вы определили свой класс X:
class X(object):
def __init__(self):
self.i = 1
Затем вы используете его следующим образом:
import my_python_module as q
import p
y = p.Y(q.X())
print y.x
print y.x.i