【发布时间】:2013-06-03 08:53:40
【问题描述】:
我在 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 来进一步简化这一点,这将更具可读性并且具有更少的变量。我不确定如何创建这样一个包装器(我几乎没有制作包装器类/函数的经验),它模仿属性但允许项目访问作为我的示例。
我将如何制作这样一个包装类?有没有更好的方法来实现这个目标?如果您有任何可以帮助的建议或阅读材料,我将不胜感激。
【问题讨论】: