Cython не может получить доступ к атрибутам cdef из одного класса cdef в другой.Python

Программы на Python
Ответить
Anonymous
 Cython не может получить доступ к атрибутам cdef из одного класса cdef в другой.

Сообщение Anonymous »

В файле pxd я объявляю класс Offset cdef:

Код: Выделить всё

cdef struct Internals:
size_t x
size_t y
bint x_is_percent
bint y_is_percent

cdef class Offset:
# Internal struct
cdef Internals _internals
...
Вот реализация pyx:

Код: Выделить всё

cdef class Offset:
def __cinit__(self, object x, object y, object _parent=None):
self._internals.x, self._internals.y = 0, 0
self._internals.x_is_percent, self._internals.y_is_percent = False, False
...
Обратите внимание: когда я пытаюсь получить доступ к self._internals из класса, он работает нормально
Но из другого класса, такого как _Absolute, который определен чуть ниже Offset:

Код: Выделить всё

cdef class _Absolute:
def __cinit__(self, Offset offset):
# Internal attributes
self._offset = offset

cpdef object _x_getter(self):
cdef Internals internals = self._offset._internals
...
Здесь, когда я пытаюсь получить доступ к _internals, он выдает AttributeError: объект «Offset» не имеет атрибута «_internals»
Я нашел одно решение, которое исправило это; обнародование _internals:

Код: Выделить всё

cdef class Offset:
# Internal struct
cdef public Internals _internals
Но для меня это не имеет никакого смысла, поскольку я не обращаюсь к атрибуту из Python, я обращаюсь к нему напрямую из Cython. Есть идеи, почему это происходит?

Подробнее здесь: https://stackoverflow.com/questions/798 ... to-another
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»