创建一个具有“ndarray”属性的类

时间:2016-04-15 17:51:08

标签: python numpy

我想创建一个如下所示的类:

class MyStructure:
    def __init__(self, ndarray_type):
        self.data = ndarray_type

我想将此类的对象作为参数传递给其他类。例如:

class Edit:
    def __init__(self, structureObject):
        self.data = structureObject

    def Gray(self, image):
        r,g,b = image[:,:,0], image[:,:,1], image[:,:,2]
        gray = 0.2989*r + 0.5870*g + 0.1140*b
        return gray

编辑:我运行时遇到错误:

from matplotlib.image import imread
im = imread('filename.jpg')
temp1 = MyStructure(im)
temp2 = Edit(temp1)
result = temp2.Gray(temp1)

追踪(最近一次呼叫最后一次):

第1行:result = temp2.​​Gray(temp1)

第5行,灰色:r,g,b =图像[:,:0],图像[:,:,1],图像[:,:,2]

AttributeError:MyStructure实例没有属性“ getitem

2 个答案:

答案 0 :(得分:0)

imageMyStructure的一个实例,它不会实现[..]访问权限。您必须实施__getitem__ MyStructure方法,该方法会将此访问权转发给您的data属性以启用此功能:

class MyStructure:
    def __init__(self, ndarray_type):
        self.data = ndarray_type
    def __getitem__(self, *a):
        return self.data.__getitem__(*a)

你的意图是什么?

答案 1 :(得分:0)

您收到错误是因为您试图将类 MyStructure 的对象视为类 numpy.ndarray 的对象,而且这不是真的。要分配给 r,g,b 的数据位于类 MyStructure 的对象的属性 data 中。属性数据 numpy.ndarray 的一个实例。

如果还不清楚,也许这会有所帮助:

temp1.__class__  # result: <class '__main__.MyStructure'>
temp1.data.__class__  # result: <class 'numpy.ndarray'>

要使其正常工作,您可以将方法 Gray 的定义修改为:

def Gray(self, image):
    r,g,b = image.data[:,:,0], image.data[:,:,1], image.data[:,:,2]
    gray = 0.2989*r + 0.5870*g + 0.1140*b
    return gray