我想实现一个numpy.ndarray
的子类,用这样的东西覆盖构造函数:
class mymat(numpy.ndarray):
def __new__(cls, n, ...):
ret = np.eye(n)
# make some modifications to ret
return ret
不幸的是,此构造函数返回的对象类型不是cls
,而是numpy.ndarray
。
使用
设置ret
的班级
ret.__class__ = cls # bombs: TypeError: __class__ assignment: only for heap types
无效。
一种可能的解决方案就是
class mymat(numpy.ndarray):
def __new__(cls, n, ...):
ret = super(mymat, cls).__new__(cls, (n, n))
ret[:] = np.eye(n)
# make some modifications to ret
return ret
这适用于小型n
,但我希望在n
较大时避免额外的Python端分配。
是否有其他方法可以避免这种额外的分配,仍然会产生类mymat
的对象?
答案 0 :(得分:4)
试试这个:
class mymat(np.ndarray):
def __new__(cls, n):
ret = np.eye(n)
return ret.view(cls)