如何从def __del__返回值

时间:2018-07-12 22:52:34

标签: python python-3.x

我正在学习使用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)

1 个答案:

答案 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)