【Python基础编程211 ● 面向对象 ● __del__()方法】


---------Python基础编程---------

Author : AI菌


 

【内容讲解】

1.__del__()是一个魔法方法,del前有两个横线,后也有两个横线
2.这个方法,当对象被删除时,会自动被调用

 

【代码实现】

class Student:
    # 初始化方法,创建完对象后会自动被调用
    def __init__(self, name):
        print('__init__方法被调用')
        self.name = name

    # 当对象被删除时,会自动被调用
    def __del__(self):
        print("__del__方法被调用")
        print("%s 被干掉了..." % self.name)


# 创建对象
s1 = Student("robot")

# 删除对象,自动调用__del__()方法
print("%d 被删除1次" % id(s1))
del s1

print("--" * 10)

# 当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
# 当使用del() 删除变量指向的对象时,则会减少对象的引用计数;
# 如果对象的引用计数不为1,那么会让这个对象的引用计数减1;
# 当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。
s2 = Student("rabbit") # s2的引用计数为1
a1 = s2 # s2的引用计数为2
a2 = s2 # s2的引用计数为3

print("%d 被删除1次" % id(s2))
del s2 # s2的引用计数减1,为2

print("%d 被删除1次" % id(a1))
del a1 # s2的引用计数减1,为1

# 引用计数为0的时候,对象会被真正删除
# 此时调用__del__()方法
print("%d 被删除1次" % id(a2))
del a2  # s2的引用计数减1,为0

 

【运行结果】

__init__方法被调用
3158148617048 被删除1次
__del__方法被调用
robot 被干掉了...
--------------------
__init__方法被调用
3158148618448 被删除1次
3158148618448 被删除1次
3158148618448 被删除1次
__del__方法被调用
rabbit 被干掉了...

 

【往期精彩】

▷【Python基础编程196 ● 读取文件的4种方式】
▷【Python基础编程197 ● 读取文件的4种方式】
▷【Python基础编程198 ● 读取文件的4种方式】
▷【Python基础编程199 ● Python怎么读/写很大的文件】
▷【Python基础编程200 ● 读取文件的4种方式】
▷【Python基础编程201 ● 读取文件的4种方式】
▷【Python基础编程202 ● 读取文件的4种方式】
▷【Python基础编程203 ● 读取文件的4种方式】

 

【加群交流】



posted @ 2020-07-31 17:31  AI菌  阅读(271)  评论(0编辑  收藏  举报