关于python的__new__() 和__del__()方法
本人萌新 刚学面向对象的python想问一下就是 为什么既然__new__()可以传入参数 为何还需要init 方法来初始化实例对象呢 。 还有就是__del__方法的作用是什么啊 如果是回收对象 那么如果在类中重写了__del__()方法而又仅仅是输出一条语句的话 那么这个对象不就没有被回收吗。 1 new底层设计,但是给了高级的接口init,就像有c/c++可以实现一切,为什么要有python一样2 有这种风险,导致内存泄漏 BngThea 发表于 2020-3-30 20:41
1 new底层设计,但是给了高级的接口init,就像有c/c++可以实现一切,为什么要有python一样
2 有这种风险, ...
谢谢啦
还是有点不懂 就是理论上来说是可以 用new初始化对象的是吧 我就是看小甲鱼的视频上面 那个new方法的参数和init的参数是一样的 那我就像是不是可以直接用new初始化对象而不是用init
第二个问题就是 很多面向对象python讲解时讲__del__方法都会重写__del__ 输出一条语句来说明他调用的时间 但没有讲明白 他的最原始的作用是什么 所以我现在不太清楚默认__del__的作用是什么了 秃头小宝贝 发表于 2020-3-30 21:13
谢谢啦
还是有点不懂 就是理论上来说是可以 用new初始化对象的是吧 我就是看小甲鱼的视频上面 那个new ...
1 是可以,但是不建议,容易出错
2 就是用来释放内存的 BngThea 发表于 2020-3-30 21:15
1 是可以,但是不建议,容易出错
2 就是用来释放内存的
噢噢噢谢谢! 头像是罗马帝国欸 懂了 就是如果像课程那样重写了 他就不能回收了 只能打印一行字了对吧 BngThea 发表于 2020-3-30 21:15
1 是可以,但是不建议,容易出错
2 就是用来释放内存的
我好像理解错了魔法方法不是事先就编写好的方法把?只是保留了这个方法 可以在特定条件下执行 如果要使用的话还是要自己编写的把? __new__(): 在类创建一个新实例是被调用。
__init__(): 是给实例的属性赋初值
__del__(): 在对象实例被回收之前会被调用,但如果你直接关闭运行环境,实例并没有被回收,该方法不会被执行。 XiaoPaiShen 发表于 2020-3-30 22:22
__new__(): 在类创建一个新实例是被调用。
__init__(): 是给实例的属性赋初值
所以__del__()方法只是在 对象被回收之前执行 而不是通过调用__del__()方法来回收对象是这样理解把 秃头小宝贝 发表于 2020-3-30 23:42
所以__del__()方法只是在 对象被回收之前执行 而不是通过调用__del__()方法来回收对象是这样理解把
是的,垃圾回收机制是系统控制的,你用 del 删除对象,回收机制会自动回收它的,会收前会执行 __del__() 方法。
如果你认为我的回答有帮助,请选择最佳答案,结贴。 秃头小宝贝 发表于 2020-3-30 22:00
我好像理解错了魔法方法不是事先就编写好的方法把?只是保留了这个方法 可以在特定条件下执行 如果要使 ...
默认编写的功能就已经实现了,自己有需求采取重写 秃头小宝贝 发表于 2020-3-30 22:00
我好像理解错了魔法方法不是事先就编写好的方法把?只是保留了这个方法 可以在特定条件下执行 如果要使 ...
有些魔法方法会从object继承,但大部分还是要你自己写的 一般什么时候要用到 __new__ 呢,比如说你想要写一个分数类,如果分子与分母月份后分子为1就返回一个整数,__init__ 是肯定做不到的,这个时候就要用 __new__ 来返回一个整数。
页:
[1]