現在、Python C APIを使用してPython(v3.5)拡張モジュールを作成する方法を学習しています。高速数値作業のようないくつかの操作はC言語で最もよく行われますが、文字列操作のような他の操作はPythonで実装する方がずっと簡単です。 PythonとCの両方のコードを使って新しい型を定義する方法はありますか?PythonとCの両方でPythonクラスを定義する
たとえば、基本ストレージと算術演算をサポートするC言語でMatrix
タイプを書いています。私はをPythonを使って定義したいと思っています。ここでは文字列の操作がはるかに簡単で、私はcstringについて心配する必要はありません。
私は時にモジュールのロード次のように__init__.py
に__str__
方法を定義しようとしました:
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サブクラスをモジュール内に整理する最良の方法は何ですか?
構造体は、おそらく複雑なデータのために有用で来るの伝統的なOOPのアプローチ(例えば行列)で延長
_Matrix
タイプを定義することができます。見てくださいctypes.Structure – eddiewould良いアイデア。しかし、私は 'numpy'配列がどのように動作するかをエミュレートしようとしています(実際には私自身の線形代数ルーチンを実際に生産するよりも優れています)。私は前後にコピーするのが遅すぎるので、Cで行列データを保存したいと思います。 –
ええ、私の提案は、行列データを表現するためにC構造体を使用することです。 PythonでこれらのC構造体にアクセスすることはできます。 – eddiewould