python 构造函数 析构函数
#构造函数是在对象被创建是自动调用的方法,用来完成初始化操作
class Test(object):
def __init__(self, name):
self.name = name
print('这是构造函数') def say_hi(self):
print('hell, %s' % self.name) def __del__(self):
print('这是析构函数') obj = Test('bigberg') obj.say_hi() #del obj
结果:
上面是python li2.py运行结果
如果在IDLE中直接F5运行结果如下:
================ RESTART: D:/ADB/kuaidou0102/kuaidou1210/li2.py ================
这是构造函数
hell, bigberg
>>>
以上两个结果不同,原因是在IDLE中程序是运行结束了,但实例化的对象object仍然存在,仍可以使用,继续操作如下:
>>> obj
<__main__.Test object at 0x0000000002F49E88>
>>>
说明该对象是存在的,所以没有执行析构函数的功能
只有执行了:del obj才自动执行析构函数,所以在IDLE中将最后一行的#去掉,才会显示如下结果:
================ RESTART: D:/ADB/kuaidou0102/kuaidou1210/li2.py ================
这是构造函数
hell, bigberg
这是析构函数
>>>
总结 :
1.构造函数是类实例化时自动执行的函数,一般用来执行初始化操作
2.析构函数是实例化删除后自动执行的函数,一般用来清除在实例化所用的变量等,用以释放内存,供计算机新运行的程序使用
析构函数是为你的类创建的对象处理后事用的,所以它的调用时机就类创建出来的对象的生命周期结束的时候。
Python中,构造函数(constructor)
和析构函数(destructor)
同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。
不同的是构造函数在创建对象后
自动被调用,而析构函数在对象被销毁前
(作为垃圾被收集)自动被调用。两者有异曲同工之妙。
可以说构造函数和析构函数就相当于两个哨兵,创建对象时,构造函数告诉计算机,我要申请实例化对象所需的内存,销毁对象时,析构函数告诉计算机,这些内存可以被回收并释放了。
在实例化类时,必须写上且写全构造函数中的参数(不包括self),以次来进行属性的初始化。
构造函数可以利用参数列表进行初始化对象属性,但是析构函数只能有一个默认的self参数,不能自定义其他参数。
构造函数和析构函数是自动调用的,但是也可以主动调用:使用className.__init__()。
析构函数一般无需写入内容,因为Python有垃圾回收机制,不需要手动释放。
python 构造函数 析构函数的更多相关文章
- C++构造函数/析构函数 设置成private的原因
C++构造函数/析构函数 设置成private的原因 标签(空格分隔): c/c++ 将构造函数,析构函数声明为私有和保护的,那么对象如何创建? 已经不能从外部调用构造函数了,但是对象必须被构造,应该 ...
- C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...
- C++ 类 & 对象-类成员函数-类访问修饰符-C++ 友元函数-构造函数 & 析构函数-C++ 拷贝构造函数
C++ 类成员函数 成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义. 需要强调一点,在 :: 运算符之前必须使用类名.调用成员函数是在对象上使用点运算符(.),这样它就能操作与 ...
- Python 构造函数、 Python 析构函数、Python 垃圾回收机制
构造函数与析构函数 构造函数: 用于初始化类的内容部状态,Python提供的构造函数式 __init__(); 也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这个函数里 ...
- python构造函数和析构函数
构造函数和析构函数 关注公众号"轻松学编程"了解更多. 1.构造方法的使用 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为__init__()的特殊方法(构造方 ...
- C++ 中的类构造函数 & 析构函数
类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可用于为某些成员变量设置 ...
- c++基础语法 构造函数 析构函数 类的组合
1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...
- c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数
每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A ...
- python 构造函数作用
1. 构造函数的作用 构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作, 当创建对象时, 对象会自动调用它的构造函数.一般来说, 构造函数有以下三个方面的作用: ...
随机推荐
- Docker学习(11) Dockerfile指令
Dockerfile指令 指令格式 FROM MAINTAINER RUN EXPOSE CMD ENTRYPOINT ADD COPY VOLUME WORKDIR ENV USER ONBUILD ...
- CVD-ALD前驱体材料
CVD-ALD前驱体材料 ALD前驱体源瓶特点是什么 ALD前驱体源瓶(起泡器)用于固态.液态及气态超纯物料类的封装,涉及微正压.常压.中低压的危险化学品,对源瓶的安全性和洁净度提出严苛的要求. ...
- 「题解」USACO15FEB Fencing the Herd G
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 P3122.USACO 官网. 题意概述 给你平面上的一些点和直线,有两种操作: 新加入一个点 \((x,y)\): ...
- 【NX二次开发】属性操作总结
内容包括:1.属相创建2.判断属性是否存在3.读取属性值4.时间属性转换成字符串5.统计属性的数量6.删除指定属性7.删除全部属性 源码: 1 #include <stdlib.h> 2 ...
- 如何在CentOS 7上搭建LAMP环境(使用YUM或编译)
什么是LAMP? LAMP是Linux,Apache,MySQL和PHP的缩写. 它是一堆应用程序的堆栈,它们在Web服务器上一起工作以托管网站. 话虽如此,每个程序都有不同的目的: 在LAMP中, ...
- 树莓派写入openwrt作为路由器
需要:树莓派4B,SD卡一张,SD卡读卡器一枚,openwrt镜像一份. 环境: Linux(deepin 20). 将SD卡插入读卡器,读卡器再插入电脑. 首先查看SD卡: sudo fdisk - ...
- ElGamal算法
简介 ElGamal算法可以用于加密和签名,其安全性依赖于计算有限域上离散对数的难度. ElGamal密钥 生成密钥对时,首先选择素数p,两个随机数g和x,g和x都小于p,然后计算: y = g ^ ...
- Java基础篇(JVM)——字节码详解
这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...
- Nginx网站服务
1.常见的网站服务 静态网站服务: Apache服务 nginx服务 动态网站服务: Tomcat服务 PHP 2.nginx网站服务特点 (1)nginx具有高并发(特别是静态资源).占用系统资源少 ...
- 1、mysql基础入门(1)
1.mysql基础入门: 1.1.数据库介绍: