创建具有"ndarray"属性的类



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

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行:结果=temp2.灰色(temp1)

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

AttributeError:MyStructure实例没有属性"getitem"

您会出错,因为您试图将MyStructure类的对象视为numpy.ndarray的对象,但这不是真的。要分配给r,g,b的数据位于类MyStructure对象的属性data中。属性datanumpy.ndaray.的实例

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

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

image是不实现[..]访问的MyStructure的实例。您必须实现MyStructure__getitem__方法,该方法将此访问转发到您的data属性以启用此:

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

你的意图是什么?

最新更新