我在 python 中有一个类,它充当 c 库的前端。该库执行模拟并处理非常大的数据数组。这个库传递一个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
,这将更具可读性并且具有更少的变量。我不确定如何创建这样一个包装器(我几乎没有制作包装器类/函数的经验),它模仿属性但允许项目访问作为我的示例。
我将如何制作这样一个包装类?有没有更好的方法来实现这个目标?如果您有任何可以帮助的建议或阅读材料,我将不胜感激。