魔法方法:__getitem__()和__len__()
1.魔法函数简介:
在Python中,如果想实现创建类似于序列和映射的类(可以迭代以及通过[下标]返回元素),可以通过重写魔法方法的方式去实现。常见的魔法方法包括__getitem__()、__setitem__()、__delitem__()、__len__(),它们的函数功能为:
1)__getitem__(self,key):
返回键对应的值;
2)__len__():
返回元素的数量;
3)__delitem__(self,key):
删除给定键对应的元素;
4)__setitem__(self,key,value):
设置给定键的值。
其中只要实现了__getitem__
和 __len__
方法就会被认为是序列。
__len__()
函数可以用来查看对象长度;
__getitem__(self,key)函数
可以对对象进行[]操作如切片、索引、iterd等,如果在类中定义了__getitem__()
方法,那么它的实例对象(假设为P)就可以以P[key]形式取值,当实例对象做P[key]运算时,就会调用类中的__getitem__()
方法。当对类的属性进行下标的操作时,首先会被__getitem__()、__setitem__()、__delitem__()
拦截,从而执行我们在方法中设定的操作,如赋值,修改内容,删除内容等。
2.Dataset类中的__getitem__
和 __len__
方法:
torch.utils.data.Dataset
是PyTorch中用来表示数据集的抽象类,Dataset是一个包装类,用来将数据包装为Dataset类,然后传入DataLoader中从而使DataLoader类更加快捷的对数据进行操作。当处理自定义的数据集的时候必须继承Dataset
,然后重写 __len__()和
__getitem__()
函数。
1)__len__()
: 使得len(dataset)
返回数据集的大小;
2)__getitem__()
:使得支持dataset[i]
能够返回第i个数据样本这样的下标操作,在__getitem__()
函数中完成图片的读取工作可以减小内存开销,只要在需要用到的时候才将图片读入。
3.参考博客:
1)https://www.jianshu.com/p/cca8e8834066