pytorch 中的Dataset这个类为什么可以调用__getitem__?
我觉得题主你想问的应该是为什么__getitem()__具有这种特殊的作用,那题主应该要知道这种前后带双下斜杠"__"的方法是类的专有方法,与一般的方法不同,我这里引用python官方文档的解释:
3.3. 特殊方法名称
一个类可以通过定义具有特殊名称的方法来实现由特殊语法所引发的特定操作 (例如算术运算或下标与切片)。这是 Python 实现 操作符重载 的方式,允许每个类自行定义基于操作符的特定行为。例如,如果一个类定义了名为
__getitem__()
的方法,并且x
为该类的一个实例,则x[i]
基本就等同于x.__getitem__(x,
i)
。除此之外还有__len_()专有方法,则len(x)就等同于x.__len__(x);
__add__()专有方法,则x+other就等同于x.__add__(x,other)
还有很多其他专有方法:详情请参考:
https://docs.python.org/zh-cn/3.7/reference/datamodel.html#special-method-names
在DataLoder的iter中,会触发子类Dataset中的getiterm函数读取数据,并拼接成一个batch返回,作为模型真正的输入
遇到了不错的解释,不可能这个对象继承了object父类里面的__getitem__,可能是在编译阶段类似于alias的过程: