在此之前,已经接触过Python最常用的魔法方法,说得这么厉害,那什么是魔法呢?
说得这么厉害,那什么是魔法呢?
魔法方法总是被左右各两个下划线包围,例如:_ _init_ _()。
魔法方法是面向对象的Python的一切,如果不知道魔法方法,说明你还没能意识到面向对象胡Python的强大。
魔法方法的“魔力”体现在它们总能够在适当的时候助你一臂之力。
_ _init__(self[,…])
之前讨论过_ _init_ _()方法,说它相当于其他面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。
曾经看到一个问题,“有时候在类定义时写_ _init_ _()方法,有时候 却没有,这是为什么呢?
我想应该不少朋友会有相同的疑惑,所以在这里解释一下:在现实生活中,有一种东西迫使人们去努力拼搏,从而获得创造力和生产力,不惜背井离乡来到一个陌生的城市承受孤独和寂寞,这个东西就叫需求。嗯,我想已经很好地回答了这个问题。
好吧,还要举个例子:
程序实现如下:
这里需要注意的是,_ _init_ _()方法的返回值一定是None,不能是其他:
所以,只有在需要进行初始化的时候才重写_ _init_ _()方法,现在大家应该就可以理解造物者的逻辑了。
但是你要知道,神这所以是神,是因为他须知什么事都留一手。其实,这个_ _init_ _()并不是实例化对象时第一个被调用的魔法方法。
_ _new_ _(cls[,])
事实上,_ _new_ _()才是在一个对对象实例化的时候调用的第一个yyif.px与其他魔法方法不同,它的第一个参数不是self而是这个类(cls),而其他的参数 会直接传递给_ _init_ _()方法。
_ _new_ _()方法需要返回一个实例对象,通常是cls这个类实例化的对象,当然也可以返回其他对象。
_ _new_ _()方法平时很少去重写它,一般让Python用默认的方案执行就可以了。但是有一种情况需要重写这个魔法方法,就是当继承一个不可变的类型的时候,它的特性就显得尤为重要了。
这里返回str._ _new_ _(cls, strint)这种做法是值得推崇的,只需要重写我们关注的那部分内容,然后其他的琐碎东西交给Python的默认机制去完成 就可以了,毕竟它们出错的概率要比我们自己写小得多。
_ _del_ _(self)
如果说_ _init_ _()和_ _new_ _()方法是对象的构造器的话,那么Python也提供了一个析构器,称为_ _del_ _()方法。当对象将要被销毁的时候,这个方法就会被调用。但一定要注意的是,并非del x 就相当于自动调用x._ _del_ _()方法是当垃圾回收机制回收这个对象
欢迎留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范
的时候调用的。