python中的__getitem__和__len__是如何执行的

我在源码里经常看到这两个函数,查了下发现这就是自带的,__getitem__不用调用也能执行,__len__需要调用才能起到作用,具体的如下:

class Fun:
    def __init__(self, x_list):
        """ 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)


fun = Fun(x_list=[1, 2, 3, 4, 5]) # intialize success

print(fun[2]) # 索引,调用的是第二个def
# __getitem__ is called
# 3

print(len(fun)) # 调用的是第三个def
# __len__ is called
# 5


你可能感兴趣的:(python,python,开发语言,后端)