我想创建一个如下所示的类:
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 ”
答案 0 :(得分:0)
image
是MyStructure
的一个实例,它不会实现[..]
访问权限。您必须实施__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