我正在学习使用Python进行编程,在这样做的时候,我想到了def __del__
将如何返回值,因此我创建了一个类Test
,它仅具有一个str
方法,并且尝试使用__del__
返回它。
起初脚本很好,但是我不知道如何在IDLE中工作时存储它:
>>> class Test:
def __init__(self,name):
self.name=name
def __del__(self):
ma=self.name
print ("works ??")
return ma
def __repr__(self):
return "name:({})".format(self.name)
答案 0 :(得分:1)
从字面上讲,从__del__
返回内容的方法是使用return
,这正是您的操作方式。但是,从__del__
返回内容实际上是没有意义的。返回值不会有用。内存管理系统将接收返回值,将其忽略并丢弃。
如果您希望做t = Test(); val = del t
,那么正如wim在评论中所说,__del__
的工作方式不是这样。 __del__
不是del
钩子;当__del__
将要回收对象时,由内存管理系统调用。 del t
只是取消分配t
变量;它不会强制对象破坏或回收,也无法接收有关任何对象破坏或回收的信息。
要以其他代码可以实际使用的方式传达__del__
中的信息,您必须使用除返回值以外的其他机制。例如,您的对象可能具有销毁回调:
class Blah(object):
def __init__(self, callback=None):
self.callback = callback
def __del__(self):
if self.callback is not None:
self.callback(self)
def notice_destruction(obj):
print("Hey look,", obj, "is about to be destroyed!")
Blah(callback=notice_destruction)