美文网首页
Python的魔法方法:__init__(),__getitem

Python的魔法方法:__init__(),__getitem

作者: LabVIEW_Python | 来源:发表于2022-07-31 08:58 被阅读0次

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

相关文章

网友评论

      本文标题:Python的魔法方法:__init__(),__getitem

      本文链接:https://www.haomeiwen.com/subject/rchkwrtx.html