Поддерживает ли cython классы данных или что-то подобное

#python #cython #python-3.7 #namedtuple #python-dataclasses

#python #cython #python-3.7 #namedtuple #python-классы данных

Вопрос:

Я заинтересован в передаче данных между Python и Cython code, чтобы данные были доступны из C и без GIL. Я думаю о достижении этого с помощью классов данных (начиная с py3.7), именованных кортежей (с хорошим синтаксисом определения начиная с py3.6) или типов расширений Cython (cdef classess).

К сожалению, классы данных и именованные кортежи, похоже, обрабатываются как универсальные объекты из Cython без какой-либо поддержки компиляции в C.

Можно использовать типы расширений Cython (классы cdef), но у них есть много недостатков по сравнению с классами данных, самое главное, что вы должны реализовать __init__ с помощью шаблонного кода для настройки всех атрибутов вашего класса, верно?

Комментарии:

1. Если вы планируете использовать 3.x — зачем использовать тег с python-2.7?

2. @PatrickArtner Извините, опечатка, исправлена в версии 3.7!

3. При беглом взгляде кажется, что dataclasses это просто модуль фабрики классов с декораторами и тому подобным, который упрощает создание классов с общими атрибутами или методами. Я думаю, что это не добавляет никакой новой функциональности класса. Я не вижу смысла пытаться использовать или реализовать это в cython .

4. Аналогично, зачем использовать namedtuples в cython . Почему не простые кортежи или списки?

5. @hpaulj Классы данных и namedtuples позволяют писать гораздо более краткий и приятный код. И поскольку я считаю, что Cython стремится предоставить способ написания хорошего кода на pythonic с производительностью на C, было бы полезно поддерживать namedtuples или классы данных с точки зрения их компиляции в C.

Ответ №1:

Я спросил разработчиков Cython, и они открыли запрос функции для реализации @dataclass для типов расширений (классов cdef): https://github.com/cython/cython/issues/2903 . Так что, надеюсь, они скоро будут поддерживаться в Cython.