python析构函数用法及注意事项


Posted in Python onJune 22, 2021

1、主动删除对象调用del 对象;程序运行结束后,python也会自动进行删除其他的对象。

class Animal:
    def __del__(self):
        print("销毁对象{0}".format(self))
cat = Animal()
cat2 = Animal()
del cat2
print("程序结束")

2、如果重写子类的del方法,则必须显式调用父类的del方法,这样才能保证在回收子类对象时,其占用的资源(可能包含继承自父类的部分资源)能被彻底释放。

class Animal:
    def __del__(self):
        print("调用父类 __del__() 方法")
        
class Bird(Animal):
    def __del__(self):
       # super(Bird,self).__del__()  #方法1:显示调用父类的del方法
        print("调用子类 __del__() 方法")
 
cat = Bird()
#del cat   #只能调用子类里面的__del__
#super(Bird,cat).__del__() #方法2:显示调用父类的__del__

函数实例扩展:

#coding=utf-8
'''
魔法方法,被__双下划线所包围
在适当的时候自动被调用
'''
#构造init、析构del
class Rectangle:
  def __init__(self,x,y):
    self.x = x
    self.y = y
    print('构造')
  '''
  del析构函数,并不是在del a对象的时候就会调用该析构函数
  只有当该对象的引用计数为0时才会调用析构函数,回收资源
  析构函数被python的垃圾回收器销毁的时候调用。当某一个对象没有被引用时,垃圾回收器自动回收资源,调用析构函数
  '''
  def __del__(self):
    print('析构')
  def getPeri(self):
    return (self.x + self.y)*2
  def getArea(self):
    return self.x * self.y
if __name__ == '__main__':
  rect = Rectangle(3,4)
  # a = rect.getArea()
  # b = rect.getPeri()
  # print(a,b)
  rect1 = rect
  del rect1
  # del rect
  while 1:
    pass

到此这篇关于python析构函数用法及注意事项的文章就介绍到这了,更多相关python析构函数的使用注意内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python3.6正式版新特性预览
Dec 15 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
详解python函数传参是传值还是传引用
Jan 16 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
python3实现多线程聊天室
Dec 12 Python
python采集微信公众号文章
Dec 20 Python
Django组件之cookie与session的使用方法
Jan 10 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
Feb 06 Python
python中validators库的使用方法详解
Sep 23 Python
Python自动化测试PO模型封装过程详解
python中的class_static的@classmethod的巧妙用法
Jun 22 #Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
You might like
thinkphp实现数组分页示例
2014/04/13 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
php工具型代码之印章抠图
2018/07/18 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python导入模块时遇到的错误分析
2017/08/30 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
html5时钟实现代码
2010/10/22 HTML / CSS
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
集团公司总经理岗位职责
2013/12/20 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
货款欠条范本
2015/07/03 职场文书
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers