Python学习记录 析构函数

Python 析构函数:对象生命周期的终章守护者 Python析构函数(del)是对象生命周期最后的"关卡",负责在对象销毁时自动执行清理操作。本文全面解析了析构函数的概念、实现和应用:1. 基础概念:析构函数用于释放资源(文件句柄、数据库连接等)和执行收尾工作;2. 实现方式:通过__del__方法定义,在引用计数为0、程序结束或作用域结束时触发;3. 应用场景:包括文件资源管理、数据库连接关闭和网络资源清理;4. 注意事项:需避免循环引用引发的内存泄漏,并谨慎处理异常;5. 与垃圾回收机制的配合关系。合理使用析构函数能提升Pytho 阅读详情

2022.08.13 DAY29

__del__方法(析构函数)和垃圾回收机制
  • __del__方法称为"析构方法",用于实现对象被销毁时所需要的操作。比如:释放对象占用的资源。
  • Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用__del__方法。
  • 我们使用del语句删除对象,从而保证调用了__del__方法。
  • 系统会自动调用__del__方法,一般不需要自定义析构方法。

实例:

# 析构函数
class Person:

    def __del__(self):
        print("销毁对象:{0}".format(self))

if __name__ == "__main__":
    p1 = Person()
    p2 = Person()
    del p2
    print("程序结束")

结果:

销毁对象:<__main__.Person object at 0x000001E1E3C51D00>
程序结束
销毁对象:<__main__.Person object at 0x000001E1E3BD8400>
__call__方法
  • 定义了__call__方法的对象,称为“可调用对象”,即该对象可以像调用函数一样去调用。

实例:

# 测试可调用方法__call__()
class SalaryAccount():
    """ 工资计算类 """

    def __call__(self, salary):
        print("算工资了:")
        yourSalary = salary * 12
        daySalary = salary // 22.5
        hourSalary = salary // 8

        return dict(yourSalary = yourSalary, monthSalary = salary, daySalary = hourSalary)


def test2():
    s = SalaryAccount()
    print(s(3000))


if __name__ == "__main__":
    test2()

结果:

算工资了:
{'yourSalary': 36000, 'monthSalary': 3000, 'daySalary': 375}
方法没有重载
  • 在其他语言中,可以定义多个重名的方法。
  • Python中,方法的参数没有类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,Python中没有方式是重载的。
  • 定义一个方法即有多种调用方式,相当于实现了其他语言中的方法的重载。
  • 定义多个重名的方法,只有最后一个有效。
Python之del析构方法_、call__方法、方法没有重载 比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用。Python是动态语言,我们可以动态的为类添加新的方法,或者动态的修改类的已有的方法。可调用对象包括自定义的函数、Python 内置函数、以及本节所讲的实例对象。该方法使得实例对象可以像调用普通函数那样,以“对象名()”的形式使用。如果我们在类体中定义了多个重名的方法,只有最后一个方法有效。的对象,称为“可调用对象”,即该对象可以像函数一样被调用。 阅读详情

相关推荐

【Unity】【模型】【AI建模】如何将AI生成的GLB格式3D模型文件导入Unity

本文介绍了一个将AI工具自动生成的GLB格式3D模型文件转换成fbx模型文件导入Unity的步骤。

O青草O的博客 Unity和游戏制作知识分享 1358

python 类对象的析构释放代码演示

本文介绍了python 类对象的析构释放代码演示,具体围绕主题展开详细的内容介绍,

weixin_45841831的博客 930

游戏封包抓取实战:雷电模拟器+ProxyDroid+查尔斯3.93+WPE全流程解析

本文详细解析了使用雷电模拟器、ProxyDroid、查尔斯3.93和WPE进行游戏封包抓取的全流程实战。通过环境搭建、代理配置与工具协同,手把手教你抓取HTTP/HTTPS及原始Socket数据,涵盖从流量转向、证书安装到数据分析和常见问题排查,是学习游戏网络协议分析与安全测试的实用指南。

u8v9w0x1y的博客 445

python(十五)——类(析构函数)、垃圾回收机制、重写、继承、多继承、多态

目录 析构函数__del__() 垃圾回收机制 引用计数 标记-清除 分代回收 重写__repr__()与__str__()函数 访问限制 __XX 变量 用中文写人开枪射击子弹的代码 继承 继承的作用 Student类继承Person类 多继承的实现 多态 多态的优点 多态存在的三个必要条件 析构函数__del__() 释放对象时自动调用 析构函数手动释放对象...

苦作舟的空城机 1920

卡诺图化简法注意事项+竞争冒险知识点总结

今天反思以下卡诺图化简法中的注意事项。 卡诺图看起来简单,但如果不熟悉的话很容易出错,因此要对画圈的规则比较熟悉。

weixin_42415266的博客 1万+

TI硬件笔试面试题型解析上

摘要: 本专栏聚焦大厂硬件笔试面试题解析,当前第14期以德州仪器(TI)为例,涵盖模拟电路与数字电路核心考点。模拟电路部分涉及最大功率传递定理、运放设计(虚短/虚断)、共模抑制比(CMRR)及高频PCB信号完整性;数字电路包括CMOS与TTL对比、建立/保持时间、竞争冒险消除、D触发器分频及“线与”逻辑实现。文章强调通过例题掌握解题方法与知识点,助力读者应对硬件工程岗位的笔试与面试挑战,附常见考点总结与实用建议。全文注重理论与实践结合,提供典型题型解析与设计思路。(150字)

启芯硬件的博客 951

Python学习:构造函数与析构函数

Python学习:构造函数与析构函数

Python热爱者的博客 1717

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4193

python中析构函数的用法

析构函数的作用就是销毁/删除临时的变量,主要对那些长期占用内存的临时变量进行销毁. class Person: eys = 2 # 所有对象都具有 def __init__(self, name, age): print('构造函数') self.name = name self.age = age def eat(self): print('吃饭') def sleep(self):

weixin_65748882的博客 4434

RT-Thread littefs控制GD32F4xx片内Flash

GD32F4xx RT-Thread下使用littefs 控制片内flash 调试记录

madao1234的博客 995

深度学习实战103-基于KDD Cup 99数据集的搭建神经网络的检测系统(NIDS),通过对网络流量数据进行分析,提供完整代码

接下来,我们定义一个全连接神经网络模型。return x# 创建数据集和数据加载器# 初始化模型通过以上步骤,我们实现了一个基于PyTorch的简单网络入侵检测系统。这个系统使用KDD Cup 99数据集进行训练和评估。实际应用中,您可以根据需求调整模型结构、超参数以及数据预处理方法。希望对大家有所帮助!如果有任何问题或需要进一步的解释,请随时咨询。

微学AI的博客 1582

python支持多种编程范式吗_Python学习记录day7

title: Python学习记录day7tags: pythonauthor: Chinge Yangdate: 2017-02-18Python学习记录day7@(学习)[python]1. 面向过程 VS 面向对象编程范式编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现...

weixin_39526872的博客 167

我的世界模组开发——前言

避坑:在开发过程中一定不要过分依赖AI,虽说现在的人工智能很厉害,但是也有很大的弊端,很多AI生成的代码错误百出,还得自己修改,而且像deepseek这种AI的训练数据还停留在一年前,给出的maven仓库地址都是过时的甚至是错误的,开发模组就是要多学习,多看源码,这样开发模组的水平才能越来越高。总而言之,build.gradle文件在我的世界Forge模组开发中扮演了重要的角色,它定义了项目的构建过程、依赖关系和编译选项,为开发者提供了灵活而强大的构建工具。开发工具推荐使用idea,因为可以使用通灵义码。

qq_24992377的博客 2594

python学习笔记

记录学习python中的简短笔记。

Qt君 184

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python中的构造函数----折磨了我一个上午的小程序,必须mark一下

   最近心血来潮,开始学Python语言,因为有C语言和MATLAB的基础,所以学起来感觉挺顺畅的,属于一门比较易懂的语言。可是,就是今天上午!!看到构造函数和析构函数并运行书上的简单程序加深印象时,频频报错。What's wrong!!!这一看就是个简单程序,没问题吧。一个类。类中进行初始化。可以传递两个参数,分别是复数的实部和虚部。self不能省略,代表类的对象本身。OK!完全没问题,但是P...

lydia_liumeijie的博客 4214

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python学习记录

Python学习记录

肥猫 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何定制自己的python学习记录

通过这种方式记录学习过程,可以清晰地看到自己的进步,及时解决遇到的问题,也能够更好地反思和总结。

myCOTB的博客 538

python学习记录201706070407

随便写写,只是为了克服自己的懒惰,所以写一下自己的python学习过程

u013422608的博客 353

python学习记录

此文章为记录Python学习而写

2301_81533581的博客 2341

解决方案-关于python在析构函数中无法使用open函数

解决方案-关于python在析构函数中无法使用open函数 class Test: def __init__(self): print("__init__") def main(self): print("main") def __del__(self): with open("test.txt", "w") as f: f.write("hhhhh") print("__del__") t =

言之。 1万+

Python机器学习模型中添加日志记录器

日志记录器是Python logging 模块的核心组件,它是应用程序日志系统的入口点,负责捕获、处理和分发日志消息,本文以Python代码为例介绍日志记录器在机器学习模型开发中扮演的关键角色:追踪程序行为、训练过程等等。

m0_46670850的博客 690

Python系统学习记录

这里简单记录我的python学习过程。 不是很系统,而且多半也是得参考网上的文献,所以我觉得没必要把各个块都分开写在多个文章中,故选择记录在这一篇文章中。

the Blog of 等不到天亮丶等时光 1309
上一篇: Python学习记录 类相关
下一篇: Python学习记录 私有属性和私有方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值