Cライブラリのフロントエンドとして機能するPythonのクラスがあります。このライブラリは、シミュレーションを実行し、非常に大きなデータ配列を処理します。このライブラリはctype
配列を転送し、ラッパーはそれを適切な に変換しますnumpy.ndarray
。
class SomeClass(object):
@property
def arr(self):
return numpy.array(self._lib.get_arr())
ただし、メモリの問題が発生しないようにするために、ndarray データをライブラリ データとは別に保持しているため、ndarray を変更しても、ライブラリで使用されている実際の配列は変更されません。ただし、同じ形状の新しい配列を渡して、ライブラリが保持している配列を上書きすることはできます。
@arr.setter
def arr(self, new_arr):
self._lib.set_arr(new_arr.ctypes)
したがって、次のように配列を操作できます。
x = SomeClass()
a = x.arr
a[0] += 1
x.arr = a
私の望みは、構文を単に にできるようにすることx.arr[0] += 1
で、これをさらに単純化することです。これにより、読みやすくなり、変数が少なくなります。プロパティを模倣するが、私の例としてアイテムへのアクセスを許可するようなラッパーを作成する方法が正確にはわかりません(ラッパークラス/関数を作成した経験はほとんどありません)。
そのようなラッパークラスを作成するにはどうすればよいですか? この目標を達成するためのより良い方法はありますか? 参考になるアドバイスや読み物があれば、よろしくお願いします。