Python中的魔法方法

发布于:2024-05-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

Python中的魔法方法

讲解:

1. __new__方法:

__new___方法是在创建实例之前进行调用的,返回的是一个对象。

2. __init__方法:

__init__方法是在创建实例后的初始化方法,是创建实例后直接调用的方法。

3. __call__方法:

__call__方法是使用实例对象进行传参的时候进行调用的,其参数可以接收所有的位置参数和所有的关键字参数。

4. __len__方法:

__len__方法相当于重写python内置的len方法,在查看类对象的长度的时候(使用len())直接掉哦用该方法。

5. __getitem__方法:

__getitem__方法相当于重写遍历的方式,在对类对象进行遍历的时候会直接调用该方法。

6. __del__方法:

__del__方法是在销毁实例对象的时候进行调用的。

代码:

class Demo:
    def __new__(cls, *args, **kwargs):
        '''
        在实例化一个对象之前调用,它的作用是创建一个实例并返回这个实例。
        :param args:
        :param kwargs:
        '''
        instance = super(Demo, cls).__new__(cls)  # 调用父类的__new__方法创建一个实例
        print("__new__: I am a \'new\' method")
        return instance  # 返回一个对象

    def __init__(self):
        '''
        初始化的时候,调用该方法。
        '''
        print("__init__: 调用成功")
        self.tp = ((i, j) for i, j in enumerate(range(5, 20, 2)))   # 创建一个嵌套元组
        self.ls = [t for t in self.tp]   # 将元组中的每一个元组赋值到列表中

    def __len__(self):
        '''
        重写该类的len方法
        :return:
        '''
        print(f"__len__: 调用成功, ls的长度为{len(self.ls)}")
        return len(self.ls)   # 返回列表的长度

    def __getitem__(self, item):
        '''
        重写遍历方式
        :param item:
        :return:
        '''
        print("__getitem__: 调用成功")
        return self.ls[item][0], self.ls[item][1]  # 返回列表每一项的索引以及值

    def __call__(self, *args, **kwargs):
        '''
        调用该实例的时,执行该方法。
        :param args:
        :param kwargs:
        :return:
        '''
        print("__call__: 调用成功")
        print(f"传入的位置参数是:{args}, 传入的关键字参数是:{kwargs}")   # 直接返回传入的参数

    def __del__(self):
        '''
        销毁该实例的时候调用该方法
        :return:
        '''
        print("__del__: Demo对象已经销毁了")


if __name__ == '__main__':
    D = Demo()  # 创建一个实例,此时会调用两个方法,顺序为:__new__  __init__
    D(1, 2, 3, 4, key1="Hello World")  # 使用实例进行传参,调用__call__方法
    len(D)  # 调用重写的__len__方法

    for i in D:  # 调用重写的遍历方法:__getitem__
        print(i)
    # 在结束的时候调用__del__方法。

输出结果:

在这里插入图片描述