概述:

Python中,构造函数(constructor)和析构函数(destructor)同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。

不同的是构造函数在创建对象后自动被调用,而析构函数在对象被销毁前(作为垃圾被收集)自动被调用。两者有异曲同工之妙。

可以说构造函数和析构函数就相当于两个哨兵,创建对象时,构造函数告诉计算机,我要申请实例化对象所需的内存,销毁对象时,析构函数告诉计算机,这些内存可以被回收并释放了。

测试:

  1. 调用次序

创建一个类并初始化构造函数__init__和析构函数__del__的内容,并且将析构函数放在最前定义,构造函数放在最后定义:

class Person:def __del__(self):print("这里是析构函数")def say(self):print("这里是自定义方法")def __init__(self):print("这里是构造函数")
per = Person()
per.say()

输出结果:

这里是构造函数
这里是自定义方法
这里是析构函数

结果显示最先被调用的是构造函数,其次是主动调用的自定义方法,最后是析构函数。而且构造函数和析构函数是自动被调用。

(经评论指出,这里做注释:此处之所以会调用析构函数是因为该程序结束,对象即被销毁,所以调用了析构函数。具体请看下一篇:python中的垃圾回收机制)

  1. 构造函数的作用

构造函数默认无初始内容,在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中的构造函数和析构函数相关推荐

  1. php中的构造函数和析构函数,php 中构造函数和析构函数

    构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...

  2. python中pass语句的作用是什么_简述 Python 中 pass 语句的作用。

    [单选题]从总体中抽取的样本数据的频率分布直方图如图所示,若总体中85%的数据不超过b,则b的估计值为( ) [单选题]Graphically, competitive market supply i ...

  3. C++:继承中的构造函数和析构函数

    C++:继承中的构造函数和析构函数 1.继承中构造函数和析构函数调用顺序 a.调用父类构造函数: b.调用其他成员的构造函数: c.调用子类构造函数: d.析构调用顺序相反. #include < ...

  4. Python中的构造函数

    Python中的构造函数是__init__函数.在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行. 比如有test.py的mod ...

  5. 7-15 单继承中的构造函数与析构函数 (10 分)

    7-15 单继承中的构造函数与析构函数 (10 分 编写代码实现一个表示点的父类Dot和一个表示圆的子类Cir,求圆的面积. Dot类有两个private数据成员 float x,y; Cir类新增一 ...

  6. python中的构造函数和构造函数和析构函数的作用

    构造函数和构造函数和析构函数都属于python中的特殊方法 其中的"__del__"就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调 ...

  7. C++中的构造函数VS析构函数

    1.构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行.构造函数的名称与类的名称的完全相同的,并且不会返回任何数据类型,也不会返回void.构造函数用于为某些成员变量设置初 ...

  8. 【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数

    加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 问题一:构造函数与析构函数可以成为虚函数么? 答案: 1.构造函数不可以成为虚函数 因为在构造函数执行结束后,虚函 ...

  9. C++:51---继承中的构造函数、析构函数、拷贝控制一系列规则

    一.继承中的构造函数 根据构造函数的执行流程我们知道: 派生类定义时,先执行基类的构造函数,再执行派生类的构造函数 拷贝构造函数与上面是相同的原理 二.继承中的析构函数 根据析构函数的执行流程我们知道 ...

最新文章

  1. redhat7操作系统安装
  2. STL标准容器类简介
  3. 【网络安全】反序列化漏洞底层扩展与制作WebShell
  4. [PHP] 通用网关接口CGI 的运行原理
  5. 跟着太白老师学python 09day 初识函数
  6. SAP UI5 初学者教程之二:SAP UI5 的引导过程(Bootstrap) 试读版
  7. HMM前向算法,维比特算法,后向算法,前向后向算法代码
  8. Gamebryo实例学习之二BackgroundLoad
  9. 拒绝做思想的巨人,行动上的矮子
  10. USACO12FEB Nearby Cows
  11. linux验证cuda安装成功_linux # centos # 安装cuda
  12. html中span不显示背景
  13. JZOJ 5347. 遥远的金字塔
  14. kettle在linux定时任务_linux环境下kettle部署(JDK安装配置,kettle安装配置,资源库配置,定时执行job)...
  15. php论坛管理系统,PHPWind论坛站群管理系统-PHPWind自动采集-PHPWind自动更新
  16. iPhone没有收到iOS16最新版的推送,如何升级系统?
  17. http的响应码200,404,302,500表示的含义分别是?
  18. 杭州市民卡领取查询网址
  19. MOSFET开关管的结构以及在MATLAB中的连接
  20. Android 画圆

热门文章

  1. 移花接木之真假baidu
  2. 微信浏览器点击选择图片报错 WeiXinJSbridge is not defined
  3. win系统oracle文件目录权限设置,win7下怎么设置完全控制权限
  4. Eclipse中如何调试(Debug)代码
  5. 数据结构课程设计-单词检索统计程序(C语言版)
  6. javascript float转int
  7. 程序员们圣诞快乐,送给心中的女神吧
  8. windows使用opencc中文简体和繁体互转 12.8
  9. 独立看门狗IWDG详细解析
  10. Source Insight4的使用以及下载