文腾 发表于 2021-4-23 12:42:50

__new__()

为什么f.close()被调用了
print为啥没有被调用

Stubborn 发表于 2021-4-23 12:57:29

你new的时候返回一个文件对象,del删除的是一个class,他们不是同一个。在new的时候返回自身对象:return super().__new__(cls)

文腾 发表于 2021-4-23 13:06:12

Stubborn 发表于 2021-4-23 12:57
你new的时候返回一个文件对象,del删除的是一个class,他们不是同一个。在new的时候返回自身对象:return s ...

如果继承了多个类
return super().__new__(cls) 这句话返回的是谁的实例

阿奇_o 发表于 2021-4-23 13:09:02

本帖最后由 阿奇_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

Stubborn 发表于 2021-4-23 13:23:26

文腾 发表于 2021-4-23 13:06
如果继承了多个类
return super().__new__(cls) 这句话返回的是谁的实例

返回自身->T对象,new这里没有经过实例化的。new是控制T对象的实例化过程
class T(...):

帅周 发表于 2021-4-23 13:25:08

__del__你在删除所有实例对象时才会运行,而不是del()时运行应该为return super().__del__(self)
页: [1]
查看完整版本: __new__()