python构造函数和析构函数
构造函数和析构函数
关注公众号“轻松学编程”了解更多。
1、构造方法的使用
 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为__init__()的特殊方法(构造方法)来实例化一个对象。
 构造方法也叫做构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法。
演示1:构造方法被调用的契机
class Person():
    #构造方法
    def __init__(self):
        print("构造函数被执行了")
    #创建对象的过程中构造函数被自动调用
p1 = Person()
输出:
构造函数被执行了
结论:创建对象的过程中调用了构造函数。
 当未手动添加构造函数时,系统会默认提供一个无参的构造函数。
演示2:构造函数和普通函数之间的区别
说明:构造函数本质上还是一个函数,函数可以有参数,也可以无参,所以同样的道理,构造函数也是如。
class Person():
    #一般情况下,构造方法的参数和成员变量有关,并且在设置的过程中与成员变量同名
    def __init__(self, name, age, height, weight):
        #print(nname, age, height, weight)
        #因为构造方法是创建对象的过程中被调用的
        #所以构造方法的作用一般是用来定义成员变量并且给成员变量赋值
        #定义属性并给属性赋值
        #通过self来进行区分是成员变量还是形参
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    def run(self):
        print("run")
    def eat(self, food):
        print("eat "+ food)     
'''
构造函数: __init__()  在使用类创建对象的时候自动调用
注意: 如果不显式的写出构造函数,默认会自动添加一个空的构造函数,函数体中什么都不实现
'''
per = Person("hanmeimei", 20, 170, 55)
print(per.name, per.age)
per.run()
per2 = Person("lili", 21, 175, 70)
print(per2.name, per2.age)
输出:
hanmeimei 20
run
lilei 21
2、self的使用
注意:self代表类的实例[对象],而非类本身。
类的方法与普通的函数只有一个特殊的区别—>他们必须有一个额外的第一个参数名称,按照惯例它的名字是self。
self.__class__:返回的是当前类的类名
class Test():
    def prt(self):
        print(self)
        print(self.__class__)
t = Test()
t.prt()
输出:
<__main__.Test object at 0x0000017D47D81B00>
<class '__main__.Test'>
演示2:self不是python的关键字
class Person():
    def run(self):
        print("run")
        print(self.__class__)
        p = self.__class__("tt", 30, 10, 30)
    def eat(self,food):
        print("eat" + food)
    def say(self):
        print("hello, my name is %s, I am %d year old" % (self.name, self.age))
    def play(a):
        print("play", a.name)
    def __init__(self, name, age, height, weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
# self代表此时正在创建对象,self.属性表示当前对象的属性
per1 = Person("tom", 20, 160, 80)
per1.say()
per2 = Person("henmeimei", 21, 160, 80)
per2.say()
per1.say()
per1.run()
输出:
hello, my name is tom, I am 20 year old
hello, my name is henmeimei, I am 21 year old
hello, my name is tom, I am 20 year old
run
<class '__main__.Person'>
3、析构函数的使用
析构函数调用的契机【对象被销毁的时候】:
1、程序执行结束,会自动调用析构函数
2、使用del 删除对象的时候,系统会自动调用析构函数
注意:如果没写析构函数,当符合析构函数调用的契机时,系统会自动调用父类的析构函数。
演示:
class Person():
    def run(self):
        print("run")
    def eat(self, food):
        print("eat "+food)
    def __init__(self, name, age, height, weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
     def __del__(self):
        print("析构函数被调用了")
per = Person("hanmeimei", 20, 170, 55)
#释放对象
del per
#注意:对象释放后就不能再进行访问了
#在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费
#其实就是作用域的问题
def func():
    per2 = Person("aa", 1, 1, 1)
func()
输出:
析构函数被调用了
析构函数被调用了
class Animal(object):
    def __del__(self):
        print('Animal父类的析构函数被调用了')
class Cat(Animal):
    pass
cat = Cat()
输出:
Animal父类的析构函数被调用了
class A():
    def __init__(self):
        print("父类A构造函数被调用了")
    def __del__(self):
        print("父类A析构函数被调用了")
class B(A):
    def __init__(self):
        print("子类B构造函数被调用了")
        A.__init__(self)
    def __del__(self):
        print("子类B析构函数被调用了")
class C(A):
    pass
def main():
    b = B()
    del b
    print("*********************")
    c = C()
if __name__ == '__main__':
    main()
输出:
子类B构造函数被调用了
父类A构造函数被调用了
子类B析构函数被调用了
*********************
父类A构造函数被调用了
父类A析构函数被调用了
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
 如果文章对您有帮助,请我喝杯咖啡吧!
公众号


关注我,我们一起成长~~
python构造函数和析构函数的更多相关文章
- python中的构造函数和析构函数
		
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
 - python学习笔记(二十一)构造函数和析构函数
		
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
 - Python 构造函数、 Python 析构函数、Python 垃圾回收机制
		
构造函数与析构函数 构造函数: 用于初始化类的内容部状态,Python提供的构造函数式 __init__(); 也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这个函数里 ...
 - python中的构造函数和构造函数和析构函数的作用
		
构造函数和构造函数和析构函数都属于python中的特殊方法 其中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用 ...
 - python 构造函数  析构函数
		
#构造函数是在对象被创建是自动调用的方法,用来完成初始化操作class Test(object): def __init__(self, name): self.name = name print(' ...
 - 学习C++ -> 构造函数与析构函数
		
学习C++ -> 构造函数与析构函数 一.构造函数的介绍 1. 构造函数的作用 构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作, 当创建对象时, 对象会自动调用 ...
 - 005_python中的构造函数和析构函数
		
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
 - .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
		
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...
 - 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
		
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
 
随机推荐
- 对于filter的理解
			
filter语法:使用filter会创建一个新数组,所以原数组不变 array.filter(function(value,index,arr), thisValue) 其中:arr:数组(可选) i ...
 - CentOS7设置内网时间同步
			
1.yum 安装 NTP服务器 [root@master ~]# yum -y install ntp 2.启动ntpd服务 [root@master ~]# systemctl start ntpd ...
 - [JZOJ]2109 清兵线 题解
			
## [JZOJ]2109 清兵线 题解 **FIRST 题目大意** 给你一些正整数,这些正整数为数轴上若干个点代表的数.现求:假设从原点出发,走m以内(包括m)的距离最多能够访问多少个点,输出m- ...
 - 045 01 Android 零基础入门  01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
			
045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...
 - VSCode搭建golang环境
			
安装对应版本的Golang 略 VSCode安装对应 Go 插件 在应用商店安装即可:go VSCode安装 Go 工具: 在VSCode输入:Crtl + Shift + P 在弹出框输入:inst ...
 - k8s的namespace一直Terminating的完美解决方案
			
k8s的namespace一直Terminating的完美解决方案 在k8s集群中进行测试删除namespace是经常的事件,而为了方便操作,一般都是直接对整个名称空间进行删除操作. 相信道友们在进行 ...
 - RESTfull是什么
			
经常做接口测试,会看很多接口文档,那怎么识别研发的接口设计是否足够规范,是否符合一些行业标准或准则.那认识了解RESTfull,可以让我们更具有专业性.让我们对接口文档的阅.接口合理性设计识别,做到有 ...
 - Oracle 和 MySQL 在显示数据库名和表名的区别
			
Oracle 显示数据库名和表名 Oracle 查看表名: select table_name from user_tables; select table_name from dba_tables; ...
 - 使用appium后安卓手机无法调出键盘解决方法
			
问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘. 原因:appium调试时,将手机输入法设置成了Unicode IME 解决方法: 方法一,手机设置里修改输入法: 不同的手 ...
 - 正式班D9
			
2020.10.16星期五 正式班D9 一.vmware workstation的使用 虚拟机管理软件 定义 虚拟机(Virtual Machine)软件是一套特殊的软件,它可以作为操作系统独立运行, ...