В настоящее время я изучаю, как писать модули расширения Python (v3.5) с использованием API Python C. Некоторые операции, такие как быстрая численная работа, лучше всего выполнять на C, тогда как другие операции, такие как манипуляции с строками, намного проще реализовать в Python. Существует ли согласованный способ использования кода Python и C для определения нового типа?Определение класса Python в Python и C
Например, я написал тип Matrix
в C, который поддерживает основные операции хранения и арифметические операции. Я хочу определить Matrix.__str__
с использованием Python, где манипуляции строк намного проще, и мне не нужно беспокоиться о cstrings.
я попытался определить метод __str__
при загрузке модуля в __init__.py
следующим образом:
from mymodule._mymodule import Matrix;
def as_str(self):
print("This is a matrix!");
Matrix.__str__ = as_str;
Когда я запускаю этот код, я получаю TypeError: can't set attributes of built-in/extension type 'matey.Matrix'
. Есть ли приемлемый способ сделать это? Если вместо этого решение относится к подклассу Matrix
, то каков наилучший способ сохранить мои базовые классы C/подклассы Python в рамках модуля?
Структуры, вероятно, пригодится для сложных данных (например, матрицы). Посмотрите на ctypes.Structure – eddiewould
Хорошая идея. Тем не менее, я пытаюсь подражать тому, как работают массивы «numpy» (просто чтобы узнать, я знаю лучше, чем рулон моих собственных линейных алгоритмов в процессе производства). Я хотел бы сохранить матричные данные в C, так как копирование взад и вперед будет слишком медленным. –
Да, отсюда мое предложение использовать C-структуры для представления матричных данных. Вы можете получить доступ к этим C-структурам на Python без «копирования назад вперед». – eddiewould