Я не вижу any indication of an existing Avro schema -> Python class code generator в документах (которые явно указывают на генерацию кода для случая Java) для произвольных интерпретаторов Python. Если вы используете Jython, вы можете использовать генератор кода Java для создания класса, к которому вы обращаетесь в своем коде Jython.
В отличие от Java и C++, отсутствие генерации кода не влияет на производительность Python в любом случае (в случае с CPython), поскольку экземпляры классов реализованы в терминах dict
s в любом случае (есть исключения из этого правила в некотором смысле , но они в основном меняют использование памяти, а не тот факт, что поиск dict
всегда задействован). Это приводит к тому, что генерация кода в значительной степени «хороша, чтобы иметь» синтаксический сахар, а не необходимую функцию для разработки; с некоторыми усилиями, вы всегда можете реализовать конвертер, чем выписывать определение class
, а также в Python, чтобы получить аналогичный эффект (так определяются классы collections.namedtuple
).
Спасибо за помощь. Но это действительно печально. Мы собираемся внедрить SDK Python для платформы IoT [Kaa] (http://www.kaaproject.org). По дизайну Kaa SDK настраивается несколькими схемами Avro путем генерации соответствующих классов Java/C++. Для C SDK мы использовали собственный генератор Avro для использования простой структуры C вместо [Avro datum] (http://avro.apache.org/docs/current/api/c/index.html#_examples). При использовании такого подхода схемы (а) Avro необходимы только ** на этапе генерации SDK **. После этого разработчик работает ** только ** с предварительно скомпилированными классами, не зная о какой-либо структуре схемы. – Den
Я не понимаю, почему этот подход не мог работать на Python. Текущая реализация python ужасно неэффективна, и генерация кода может значительно ускорить процесс. – Charles