pytorch之类中的__getitem__ __len__le
在Python中如果想构建类似序列和映射的类(就是可以迭代,以及通过[下标]返回元素的用法),可以通过重写魔法函数的方式来实现,常用的魔法函数及其功能如下:
1) __getitem__(self,key):返回键对应的值 value #类实例化之后,通过使用下标的方法对类实例化对象进行取值
2) __len__(): 返回元素的长度 #在类实例化之后,通过len()函数的调用就可以使类下的该函数发挥作用
3) __delitem__(self,key):删除给定键key对应的值 value # 待补充
4) ___setitem__(self,key,value):设置给定键key的值 value #待补充
其中,只要实现了前两个函数,就可以被认为是序列。
由于第1)个函数可以对对象进行类似list的操作,如切片、索引、迭代等,{可迭代对象指的是:可以用 for循环的对象,如:字符串、列表、元组、字典、集合等等 } 如果在类中定义了该方法,则类的实例对象(假设为P)就可以以P[key]方式取值,并且会调用类中的该方法。当对类的属性进行下标操作时,首先会被1/3/4 操作拦截,从而执行我们在其方法中设定的操作:如赋值、修改内容、删除内容等。
在处理自定义数据集时要继承Dataset类,然后重写__len__() / __getitem__() 函数。
其中两个函数的作用: 可以通过len(dataset)返回数据集的大小;利用dataset[i]能够返回第i个数据样本,同时在__getitem__()函数中完成图片的读取工作可以减少内存开销,只要在需要用到的时候才将图片读入。
参考:https://blog.csdn.net/weixin_39504171/article/details/106680548