python中构造方法和析构方法的区别_Python中的构造和析构

在此之前,已经接触过Python最常用的魔法方法,说得这么厉害,那什么是魔法呢?

说得这么厉害,那什么是魔法呢?

魔法方法总是被左右各两个下划线包围,例如:_ _init_ _()。

魔法方法是面向对象的Python的一切,如果不知道魔法方法,说明你还没能意识到面向对象胡Python的强大。

魔法方法的“魔力”体现在它们总能够在适当的时候助你一臂之力。

_ _init__(self[,…])

之前讨论过_ _init_ _()方法,说它相当于其他面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。

曾经看到一个问题,“有时候在类定义时写_ _init_ _()方法,有时候 却没有,这是为什么呢?

我想应该不少朋友会有相同的疑惑,所以在这里解释一下:在现实生活中,有一种东西迫使人们去努力拼搏,从而获得创造力和生产力,不惜背井离乡来到一个陌生的城市承受孤独和寂寞,这个东西就叫需求。嗯,我想已经很好地回答了这个问题。

好吧,还要举个例子:

ac6eddc451da81cb7c86e224be3484100824314b.jpeg?token=b79302fc0e28ba3d36d48d3e844dd8ab&s=A1C2B340DAA6976C0C4DE40F0300E0C3

程序实现如下:

359b033b5bb5c9eaae6c6a11396be2063bf3b37a.jpeg?token=cfcd6ea2d9f24b597e65ce12b222b7bf&s=69D28344EEE2D7740C5D780F030030C2

这里需要注意的是,_ _init_ _()方法的返回值一定是None,不能是其他:

a044ad345982b2b7fc610c37deff9fe977099b1b.jpeg?token=1e8cccdddb1ae5c0ce6b0b25ed7e0da4&s=29C283461FA1BF7454418C0E0300E0C3

所以,只有在需要进行初始化的时候才重写_ _init_ _()方法,现在大家应该就可以理解造物者的逻辑了。

但是你要知道,神这所以是神,是因为他须知什么事都留一手。其实,这个_ _init_ _()并不是实例化对象时第一个被调用的魔法方法。

_ _new_ _(cls[,])

事实上,_ _new_ _()才是在一个对对象实例化的时候调用的第一个yyif.px与其他魔法方法不同,它的第一个参数不是self而是这个类(cls),而其他的参数 会直接传递给_ _init_ _()方法。

_ _new_ _()方法需要返回一个实例对象,通常是cls这个类实例化的对象,当然也可以返回其他对象。

_ _new_ _()方法平时很少去重写它,一般让Python用默认的方案执行就可以了。但是有一种情况需要重写这个魔法方法,就是当继承一个不可变的类型的时候,它的特性就显得尤为重要了。

810a19d8bc3eb13500edbaea494cfcd5fd1f4415.jpeg?token=5ce4e28110689ef156176a598c38d5bb&s=69C283460AE49F724E50F803030030C2

这里返回str._ _new_ _(cls, strint)这种做法是值得推崇的,只需要重写我们关注的那部分内容,然后其他的琐碎东西交给Python的默认机制去完成 就可以了,毕竟它们出错的概率要比我们自己写小得多。

_ _del_ _(self)

如果说_ _init_ _()和_ _new_ _()方法是对象的构造器的话,那么Python也提供了一个析构器,称为_ _del_ _()方法。当对象将要被销毁的时候,这个方法就会被调用。但一定要注意的是,并非del x 就相当于自动调用x._ _del_ _()方法是当垃圾回收机制回收这个对象

欢迎留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

的时候调用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值