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__方法。