Python - 面向对象编程 - __del__() 析构方法

简介: Python - 面向对象编程 - __del__() 析构方法

del 语句


Python 提供了 del 语句用于删除不再使用的变量

 

语法

del 表达式

 

删除变量的栗子

var = "hello"
del var
print(var)
# 输出结果
    print(var)
NameError: name 'var' is not defined


变量已经被删除了,所以无法访问变量

 

类的析构方法


  • Python 提供了一种机制使得对象被删除前能够得到通知
  • 对象被删除时,如果该对象拥有名为 __del__  的方法,该方法在删除前被调用,该方法又被称为析构方法

 

语法

class 类:

   def__del__(self):

       self.属性

 

重点

  • 析构方法是对象在被垃圾回收的时候起作用的一个方法
  • 它的执行一般也就意味着对象不能够继续引用, 回收内存
  • Python 建议不要在对象销毁时做任何事情,因为对象销毁的时间难以确定
  • 所以析构方法一般无须定义,日常使用时无需关心内存的分配和释放,因为此工作都是交给 Python 解释器来执行
  • 一句话:析构方法的调用是由解释器在进行垃圾回收时自动触发执行的

 

栗子一

当对象在某个作用域中调用完毕,在跳出其作用域的同时析构方法会自动被调用,这样可以释放内存空间

# 析构方法
class PoloBlog:
    # 构造方法
    def __init__(self):
        print("自动调用构造方法")
    def __del__(self):
        print("自动调用析构方法,释放内存")
blog = PoloBlog()
print("最后一句代码")
# 输出结果
自动调用构造方法
最后一句代码
自动调用析构方法,释放内存


栗子二

主动 del 对象

# 析构方法
class PoloBlog:
    # 构造方法
    def __init__(self):
        print("自动调用构造方法")
    def __del__(self):
        print("自动调用析构方法,释放内存")
blog = PoloBlog()
# 主动删除对象
del blog
print("最后一句代码")
# 输出结果
自动调用构造方法
自动调用析构方法,释放内存
最后一句代码 


  • 使用 del 语句,相当于主动调用对象的析构方法,会立即删除对象,并回收内存
  • 通常是删除临时的对象,对那些长期占用内存的临时对象进行回收

 

相关文章
|
1月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
WK
|
20天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
68 36
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
63 2
11种经典时间序列预测方法:理论、Python实现与应用
|
27天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
1月前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
22 2
|
1月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
21 1
|
1月前
|
Python
Python中的push方法详解与实例
Python中的push方法详解与实例
|
1月前
|
存储 Python
python列表操作和方法
python列表操作和方法
30 1
|
1月前
|
存储 索引 Python
反转Python列表的4种方法
反转Python列表的4种方法
|
1月前
|
Linux Python
Python获得本机本地ip地址的方法
【10月更文挑战第8天】 socket模块包含了丰富的函数和方法,可以获取主机的ip地址,例如gethostbyname方法可以根据主机名获取ip地址,gethostbyname_ex方法可以获得本机所有ip地址列表,也可以使用netifaces模块获取网卡信息。
36 0