让我自己的课堂表现得像numpy.ndarray

时间:2013-05-29 06:34:28

标签: python class numpy operator-overloading override

我的项目有一个类,并希望其他一些方法能够接受它作为参数。我要做的是将数据(numpy.ndarray对象)和一些关于数据的重要信息打包到一个对象中,因此我不必单独存储它们并在将来引起混淆。但是我也希望这个类尽可能地表现得像numpy.ndarray。我覆盖了+, - 等运算符。但是对于运算符以外的函数(例如min()matplotlib.pylab.plot()等),似乎没有一个好的方法。< / p>

我的课程是:

import numpy
class MyCls(object):
  def __init__(self):
    # Pack data and info into one place
    self.data = numpy.ones((10, 10))
    self.info = 'some info on the data'

我想让其他一些功能接受它。 E.g。

mycls = MyCls()
x = min(mycls) # I was hoping this could return min(mycls.data)

from matplotlib import pylab
pylab.plot(x) # I was hoping this could plot x.data

我试图覆盖__getitem__()的{​​{1}}:

MyCls

适用于def __getitem__(self, k): return self.data[k] 。我想这是因为在min()中,它调用min()并返回self.data中的每个元素。但它不适用于另一个不调用__getitem__()的函数,例如__getitem__()

我想知道,对于pylab.plot()的一般用途,它可能会使用x,而不是x.data本身吗?或者还有另一种做同样事情的好方法吗?

0 个答案:

没有答案