Python的魔法方法(Magic Method)是Python的一种高级语法,允许你在类中自定义方法,魔法方法的命名格式为以双下划线开头并以双下划线结尾,例如:__xxx__()。
当Python解释器遇到特殊句法时,会去自动调用特殊方法,例如:
class FUN():
# Magic Method: __str__
def __str__(self) -> str:
return "Hello, world!"
fun = FUN()
print(fun)
运行结果如下:
Hello, world!
PyTorch要求:一个自定义的Dataset类,必须实现三个魔法方法:
- __init__():在创建类的一个新实例时,自动调用,实现该实例的初始化
- __len__(): 遇到Python内置函数len()时,自动调用,返回对象的长度
- __getitem__(): 遇到方括号[]索引、迭代器和for语法时自动调用,返回索引值idx对应的元素(item)。
范例程序如下
from torch.utils.data import Dataset
class MyDataSet(Dataset):
def __init__(self, x_list) -> None:
super().__init__()
""" initialize the class instance
Args:
x_list: data with list type
Returns:
None
"""
if not isinstance(x_list, list):
raise ValueError("input x_list is not a list type")
self.data = x_list
print("intialize success")
def __getitem__(self, idx):
print("__getitem__ is called")
return self.data[idx]
def __len__(self):
print("__len__ is called")
return len(self.data)
my_dataset = MyDataSet(x_list=[1, 2, 3, 4, 5])
print(my_dataset[2])
print(len(my_dataset))
for item in my_dataset:
print(item)
运行结果如下:
__init__ is called
intialize success
__getitem__ is called
3
__len__ is called
5
__getitem__ is called
1
__getitem__ is called
2
__getitem__ is called
3
__getitem__ is called
4
__getitem__ is called
5
__getitem__ is called