简述Python中的构造函数和析构函数
概述:
Python中,构造函数(constructor)
和析构函数(destructor)
同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。
不同的是构造函数在创建对象后
自动被调用,而析构函数在对象被销毁前
(作为垃圾被收集)自动被调用。两者有异曲同工之妙。
可以说构造函数和析构函数就相当于两个哨兵,创建对象时,构造函数告诉计算机,我要申请实例化对象所需的内存,销毁对象时,析构函数告诉计算机,这些内存可以被回收并释放了。
测试:
- 调用次序
创建一个类并初始化构造函数__init__
和析构函数__del__
的内容,并且将析构函数放在最前定义,构造函数放在最后定义:
class Person:def __del__(self):print("这里是析构函数")def say(self):print("这里是自定义方法")def __init__(self):print("这里是构造函数")
per = Person()
per.say()
输出结果:
这里是构造函数
这里是自定义方法
这里是析构函数
结果显示最先被调用的是构造函数,其次是主动调用的自定义方法,最后是析构函数。而且构造函数和析构函数是自动被调用。
(经评论指出,这里做注释:此处之所以会调用析构函数是因为该程序结束,对象即被销毁,所以调用了析构函数。具体请看下一篇:python中的垃圾回收机制)
- 构造函数的作用
构造函数默认无初始内容,在Python的类中默认存在且无需用户调用,它的最大作用是在创建对象时进行初始化工作
。
定义一个类(利用构造函数初始化属性)
class Person:def say(self):print("Hello, I am %s, %d years old"% (self.name, self.age))def __init__(self, name, age): #参数是name和age,self不需要传参self.name = nameself.age = age
per1 = Person("Tom", 18) #在创建对象时进行传参初始化
per1.say()
per2 = Person("Jerry", 16)
per2.say()
打印结果
Hello, I am Tom, 18 years old
Hello, I am Jerry, 16 years old
在实例化类时,必须写上且写全构造函数中的参数(不包括self),以次来进行属性的初始化。
附:
构造函数可以利用参数列表进行初始化对象属性,但是析构函数只能有一个默认的
self
参数,不能自定义其他参数。构造函数和析构函数是自动调用的,但是也可以主动调用:使用
className.__init__()
。析构函数一般无需写入内容,因为Python有垃圾回收机制,不需要手动释放。
<初学小白,如有问题请指出>
简述Python中的构造函数和析构函数相关推荐
- php中的构造函数和析构函数,php 中构造函数和析构函数
构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...
- python中pass语句的作用是什么_简述 Python 中 pass 语句的作用。
[单选题]从总体中抽取的样本数据的频率分布直方图如图所示,若总体中85%的数据不超过b,则b的估计值为( ) [单选题]Graphically, competitive market supply i ...
- C++:继承中的构造函数和析构函数
C++:继承中的构造函数和析构函数 1.继承中构造函数和析构函数调用顺序 a.调用父类构造函数: b.调用其他成员的构造函数: c.调用子类构造函数: d.析构调用顺序相反. #include < ...
- Python中的构造函数
Python中的构造函数是__init__函数.在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行. 比如有test.py的mod ...
- 7-15 单继承中的构造函数与析构函数 (10 分)
7-15 单继承中的构造函数与析构函数 (10 分 编写代码实现一个表示点的父类Dot和一个表示圆的子类Cir,求圆的面积. Dot类有两个private数据成员 float x,y; Cir类新增一 ...
- python中的构造函数和构造函数和析构函数的作用
构造函数和构造函数和析构函数都属于python中的特殊方法 其中的"__del__"就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调 ...
- C++中的构造函数VS析构函数
1.构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行.构造函数的名称与类的名称的完全相同的,并且不会返回任何数据类型,也不会返回void.构造函数用于为某些成员变量设置初 ...
- 【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数
加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 问题一:构造函数与析构函数可以成为虚函数么? 答案: 1.构造函数不可以成为虚函数 因为在构造函数执行结束后,虚函 ...
- C++:51---继承中的构造函数、析构函数、拷贝控制一系列规则
一.继承中的构造函数 根据构造函数的执行流程我们知道: 派生类定义时,先执行基类的构造函数,再执行派生类的构造函数 拷贝构造函数与上面是相同的原理 二.继承中的析构函数 根据析构函数的执行流程我们知道 ...
最新文章
- redhat7操作系统安装
- STL标准容器类简介
- 【网络安全】反序列化漏洞底层扩展与制作WebShell
- [PHP] 通用网关接口CGI 的运行原理
- 跟着太白老师学python 09day 初识函数
- SAP UI5 初学者教程之二:SAP UI5 的引导过程(Bootstrap) 试读版
- HMM前向算法,维比特算法,后向算法,前向后向算法代码
- Gamebryo实例学习之二BackgroundLoad
- 拒绝做思想的巨人,行动上的矮子
- USACO12FEB Nearby Cows
- linux验证cuda安装成功_linux # centos # 安装cuda
- html中span不显示背景
- JZOJ 5347. 遥远的金字塔
- kettle在linux定时任务_linux环境下kettle部署(JDK安装配置,kettle安装配置,资源库配置,定时执行job)...
- php论坛管理系统,PHPWind论坛站群管理系统-PHPWind自动采集-PHPWind自动更新
- iPhone没有收到iOS16最新版的推送,如何升级系统?
- http的响应码200,404,302,500表示的含义分别是?
- 杭州市民卡领取查询网址
- MOSFET开关管的结构以及在MATLAB中的连接
- Android 画圆