python析构和构造函数

概述:

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 = name
        self.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有垃圾回收机制,不需要手动释放。

转载:添加链接描述https://blog.csdn.net/qq_43968080/article/details/90729828

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值