我想创建一个如下所示的类:
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中。属性data是numpy.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)
你的意图是什么?