__new__()
为什么f.close()被调用了print为啥没有被调用 你new的时候返回一个文件对象,del删除的是一个class,他们不是同一个。在new的时候返回自身对象:return super().__new__(cls) Stubborn 发表于 2021-4-23 12:57
你new的时候返回一个文件对象,del删除的是一个class,他们不是同一个。在new的时候返回自身对象:return s ...
如果继承了多个类
return super().__new__(cls) 这句话返回的是谁的实例 本帖最后由 阿奇_o 于 2021-4-23 13:25 编辑
因为你要调用 对象的__del__() 才会去执行。
del var 会 在“命名空间”中 删除该变量/对象,是“手动销毁”了该变量/对象。
另外 del 好像在某种情况下会调用__del__我不记得怎么用了。。你可以自己去查查文档。
In : class FO():
...: def __del__(self):
...: print('我被删除了?')
...:
In : f=FO()
In : f
Out: <__main__.FO at 0x1d1d9114788>
In : f.__del__()
我被删除了?
In : f # 文档里说:__del__ method is not guaranteed ... 不能保证在解释器运行期间真的去“删除”该对象。即 它还是可能存在的。要看不同对象的类型及其垃圾回收机制。
Out: <__main__.FO at 0x1d1d9114788>
In : del f# “手动消耗”该对象
In : f
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-8-a9fcd54b25e7> in <module>
----> 1 f
NameError: name 'f' is not defined
文腾 发表于 2021-4-23 13:06
如果继承了多个类
return super().__new__(cls) 这句话返回的是谁的实例
返回自身->T对象,new这里没有经过实例化的。new是控制T对象的实例化过程
class T(...): __del__你在删除所有实例对象时才会运行,而不是del()时运行应该为return super().__del__(self)
页:
[1]