pytorch之类中的__getitem__ __len__le

2021-08-20  本文已影响0人  Allard_c205

在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

上一篇下一篇

猜你喜欢

热点阅读