凡是在类中定义了这个getitem 方法,那么它的实例对象(假定为p),可以像这样p[key] 取值,当实例对象做p[key] 运算时,会调用类中的方法getitem。
一般如果想使用索引访问元素时,就可以在类中定义这个方法(getitem(self, key) )。
先用一个夸张一点的例子来说明这个问题。
getitem()
我们使用了getitem()之后,我们就可以对类实现引用,
def __getitem__(self, idx):
img_name = self.img_path[idx]
img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
img = Image.open(img_item_path)
label = self.label_dir
return img,label
这里我们重写了getitem()类
当我们对MyData使用[]索引的时候,就会调用getitem()类,
getitem()返回的结果,就是我们得到的输出。
这里我们返回的是,img和label
ants_dataset = MyData(root_dir,ants_label_dir)
ants_dataset[0]
Out[7]:
(<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x279B5A9BE80>,
'ants')
ants_0 = ants_dataset[0]
ants_dataset[1]
Out[9]:
(<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x333 at 0x279D2390940>,
'ants')
这里
ants_dataset[1]的输出是
(
‘ants’)
这里用括号括起来,说明是一个元组,里面有两个元素,
‘ants’
正好对应了getitem()的两个返回值img,label