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 语句,相当于主动调用对象的析构方法,会立即删除对象,并回收内存
- 通常是删除临时的对象,对那些长期占用内存的临时对象进行回收
Python - 面向对象编程 - __del__() 析构方法的更多相关文章
- python 面向对象编程 之 析构方法
析构方法:当对象在内存中被释放的时候,自动触发执行 如果产生的对象仅仅只是用户级别的, 那么无需定义__del__,如果对象还会向操作系统发生系统调用, 即一个对象有用户级别与内核级两种资源, 比如打 ...
- python -- 面向对象编程(属性、方法)
一.属性 对象的属性(attribute)也叫做数据成员(data member). 如果想指向某个对象的属性,可以使用格式: object.attribute 属性又分为:私有属性和公有属性. 私有 ...
- python 面向对象编程(一)
一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...
- python 面向对象进阶之内置方法
一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- python 面向对象编程(高级篇)
飞机票 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对 ...
- Python 面向对象编程基础
Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...
- 图解python | 面向对象编程
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
随机推荐
- 自学linux——15.云主机的购买流程及域名的购买备案解析
项目上线流程 一.服务器选配购买 项目上线的服务器必须是外网服务器 1.服务器购买情况 真实服务器(成本过高,购买内部自用) 云服务器(上线首选):阿里云,腾讯云,华为云 2.购买阿里云服务器:htt ...
- 四、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Mvvm的13示例
上一篇之分析了示例,没有最终写DEMO,把这一篇分析完,总结后一起写Prism下的MVVM例子. 这一篇开始分析从13示例开始,分析到MVVM主要部分结束然后写一个分析后的总结DEMO 添加一段新的内 ...
- Java互联网架构师系统进阶课程 (一)【享学】
2.线程的并发工具类 Fork-Join 什么是分而治之? 规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到 ...
- WinUI 3学习笔记(2)—— 用ListView来展示集合
在WPF的时代,我们多是使用ListBox和ListView来展示,纵向滚动条显示的集合数据.这两个控件的默认样式,以及对触控的支持,已完全落后于时代.他们两个分别长这样,和Win10及Win11的风 ...
- Wireshark基础
Wireshark基础 wireshark简介: wireshark是一款用于追踪网络流量的辅助工具,帮助捕获.分析网络封包,并进行分析. 主要功能: 1.网络分析任务 查看网 ...
- Quartz 实现同一辅助类 重复开启多任务
前言: 最近做一个项目,需要用到定时任务,第一就想到了Quartz,然后很开心的就实现了功能,但是后来发现一个问题,如果需要开启多个定时任务,需要写多个辅助类,而辅助类里面的功能基本差不多,这是我就想 ...
- Java-Dubbo学习及整合SpringBoot
Dubbo架构 Dubbo是Java的RPC框架,具有三大核心功能:面向接口的远程方法调用,智能容错和负载均衡,以及服务的自动注册和发现 Dubbo架构图: 节点角色说明: 节点 说明 Provide ...
- Use w3m as Web Browser
Installation: apt-get install w3m. use "a" to input text, "tab" to jump between ...
- Beescms V4.0_R_20160525代码审计笔记
写在前面 什么是报错注入?正常用户访问服务器发送id信息返回正确的id数据.报错注入是想办法构造语句,让错误信息中可以显示数据库的内容:如果能让错误信息中返回数据库中的内容,即实现SQL注入. 复现过 ...
- css内容渐入效果实现
.fade-in-section { opacity: 0; transform: translateY(20vh); visibility: hidden; transition: opacity ...