У меня есть некоторый сложный сгенерированный код Cython, который оборачивает библиотеку C ++.
Для одной из библиотек C ++, которую я обертываю, я получаю действительно трудную для понимания ошибку. Ниже приведен минимальный воспроизводимый пример
bad.pxd
:
cdef class Foo:
pass
cdef class Bar:
pass
bad.pyx
:
cdef class Bar:
x = {}
Bar.x['Foo'] = Foo
@property
def Foo(self):
pass
@Foo.setter
def Foo(self, val):
pass
Ошибка компилятора Cython:
Error compiling Cython file:
------------------------------------------------------------
...
cdef class Bar:
x = {}
Bar.x['Foo'] = Foo
^
------------------------------------------------------------
bad.pyx:4:19: 'Foo' is not a constant, variable or function identifier
Это прекрасно компилируется, если я закомментирую Bar.x['Foo'] = Foo
или если я закомментирую свойство.
Похоже, вы не можете ссылаться на имя типа, если вы также используете это имя в качестве свойства. Это нормально, если это метод, но не свойство.
Это нарушает какое-то правило в Cython или это скорее ошибка?
Я понимаю, что это правильно ответ "не делай этого", но, к сожалению, я не контролирую имена, которые приводят к этому по общему признанию странному определению класса.