1.初始魔方方法
Python中的魔法方法(Magic Methods),也称为双下划线方法(Dunder Methods),是特殊方法,其名称以双下划线开头和结尾,例如__init__、__str__、__add__等。这些方法提供了一种使Python对象能够使用内置函数和语言结构的方式。
2.魔法方法举例
在Python中魔法方法有很多种,在这篇文章中我们先来介绍一下三个魔法方法。__init__、__new__、__del__。
1. __new__()
__new__(cls[...])在__init__()之前被调用,参与构建对象。对象的诞生流程是先调用__new__()方法,创建一个类的实例,然后将其传递给__init__()方法,在进行个性化定制。
class CapStr(str): #创建一个类并且继承str类
def __new__(cls,string): #__new__(cls,[...])
string = string.upper() #利用upper()将传进来的参数都变成大写
return super().__new__(cls,string) #返回str类中的__new__()方法,创建一个类
c = CapStr("Python")
c
# 'PYTHON'
# CapStr继承了str类,所以实例对象调用str中的方法也是可以的
c.lower()
# 'python'
上述代码中,CapStr中的__new__函数将系统的__new__函数重写了一下,在系统生成实例对象前,先用__new__将参数变为大写,再去调用str类中的__new__创建真正的实例。
注意:c对象是 因为调用了父类中的new方法才生成的。而因为重写的__new__()方法被覆盖了,功能变成将输入的参数变为大写了。
2. __init__()
对于__init__(),我想大家都不陌生,我们在接触构造方法的时候,第一个接触的就是它了,__init__()的作用是在对象初始化的时候就实现个性化定制,(在类实例化对象的时候自动进行调用)。
class Fun:
def __new__(self):
print("我是__init__,我自动执行了~~")
f = Fun()
# 我是__init__,我自动执行了~~
通过上面的代码我们可以看到,我们并没有调用__new__()方法,仅仅在创建实例对象的时候就自动输出了__new__()中的内容,说明__new__()方法在对象初始化的时候就会自动调用。
3. __del__()
在对象被创建的时候有__new__()方法,与之对应的,在对象销毁的时候,也有一个方法——__del__()。
具体用法如下:
>>> class B:
def __init__(self):
print("我被创建了!")
def __del__(self): #创建构造方法__del__
print("我被销毁了!")
b = B() #创建实例对象b
# 我被创建了!
del b #销毁一个对象的方法为 del + 对象名
# 我被销毁了!
b = B()
# 我被创建了!
c = b #将实例对象赋值给另一个变量,只有将全部的实例对象都销毁后,才会执行__del__()的内容
del b
del c
# 我被销毁了!
根据上述代码,可以得知,并不是说使用del就会触发__del__()魔法方法,只有在所有对象被销毁时才会调用 。因为Python引入了垃圾回收机制garbage collection,当检测到一个对象没有任何引用的时候,才会将其销毁。
对于__del__()方法,可以通过一个该实例的新引用来推迟其销毁(对象重生)。
大家感兴趣可以看我的另一篇文章。对象重生之复活吧我的爱人!https://blog.csdn.net/qq_49873907/article/details/130121421