Означает ли это, если вы определили класс python с cdef all self. * атрибуты должны быть определены cdef?
blockquote>Да. Это явно указано в документации :
Атрибуты в классах cdef ведут себя иначе, чем атрибуты в обычных классах:
blockquote>
- Все атрибуты должен быть предварительно объявлен во время компиляции
- ...
Вы можете с радостью сохранить строку, указав атрибут типа объекта :
cdef public object msg
Внутренне причина в том, что в
cdef class
нет словаря, который экономит место и ускоряет доступ к атрибуту, но это означает, что он не может иметь произвольный атрибуты, добавленные во время выполнения. Это достаточно похоже на использование__slots__
в обычном классе Python.
Чтобы решить проблему, используйте эту команду для создания проекта (он сгенерирует папку libs и файл jar):
./gradlew -p web -x test -x jar build
Версия Gradle: 4.7. (Gradle 5.3 не работает)