Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中销毁对象?_Python_Python 3.x_Python 3.7 - Fatal编程技术网

如何在python中销毁对象?

如何在python中销毁对象?,python,python-3.x,python-3.7,Python,Python 3.x,Python 3.7,我有一个timer类,我设计它只启动一次,然后(最好)删除它自己。我有没有办法实现这种自我删除 class timer: def __init__(self, duration, function, args): self.duration = duration self.function = function self.args = args def start(self):

我有一个timer类,我设计它只启动一次,然后(最好)删除它自己。我有没有办法实现这种自我删除

class timer:
        def __init__(self, duration, function, args):
            self.duration = duration
            self.function = function
            self.args = args
        def start(self):
            self.time = time.time()
            self.validity = True    
        def check(self):
            if(int(self.time)+self.duration < time.time() ):
                self.function(self.args)
                self.validity = False
        def __del__(self):
            print("timer destroyed")
类计时器:
定义初始化(自身、持续时间、函数、参数):
self.duration=持续时间
自我功能
self.args=args
def启动(自):
self.time=time.time()
自我效度=真
def检查(自我):
if(int(self.time)+self.duration
您可以遵循类似的方法

一个
对象。可以调用\uu del\uuu(self)
来销毁实例

>>> class Test:
...     def __del__(self):
...         print "deleted"
... 
>>> test = Test()
>>> del test
deleted
除非删除对象的所有引用,否则不会删除该对象

另外,从Python官方文档参考:

del x不直接调用x。del()-前者递减 x的引用计数为1,后者仅在x的 引用计数达到零


在解决方案中,您需要使用类似于
del object
的方法,其中对象是要删除的实例。

您可以采用类似的方法

一个
对象。可以调用\uu del\uuu(self)
来销毁实例

>>> class Test:
...     def __del__(self):
...         print "deleted"
... 
>>> test = Test()
>>> del test
deleted
除非删除对象的所有引用,否则不会删除该对象

另外,从Python官方文档参考:

del x不直接调用x。del()-前者递减 x的引用计数为1,后者仅在x的 引用计数达到零


在解决方案中,您需要使用类似于
del object
的东西,其中对象是您要删除的实例。

您是否尝试过不使用?大概是这样的:

timer = None

你试过不使用吗?大概是这样的:

timer = None

Python具有垃圾收集功能。除非您有非常具体的需求,否则删除对象本身甚至没有意义。您所能做的最好的事情就是确保在使用计时器之后,没有任何变量或对象包含对计时器的引用。除非您有非常具体的需求,否则删除对象本身甚至没有意义。你所能做的最好的事情就是确保在你使用计时器之后,没有包含对它的引用的变量或对象。有没有一种方法可以从另一个方法调用del。例如,如果触发timer.check,将删除整个计时器对象?
del
仅删除对该对象的本地或全局引用。当对象的引用计数为零时,该对象将被垃圾回收器删除,除非您手动运行垃圾回收器,但无法控制何时删除deleted@IncredibleCoder我不这么认为。在方法中调用del意味着对象必须删除自身,这根本没有意义。我的建议是在主循环中删除它。另外,请注意上面lain的重要评论,举一个简单的例子:
a=Test();a、 某个删除自身()的方法。即使出于某种原因在方法中运行了
del self
,对象仍然会有对它的引用
a
。如果您在某个地方也有
b=a
,那么运行
dela
不会删除该对象,因为现在有另一个对它的引用
b
是否有一种方法可以从另一个方法调用del。例如,如果触发timer.check,将删除整个计时器对象?
del
仅删除对该对象的本地或全局引用。当对象的引用计数为零时,该对象将被垃圾回收器删除,除非您手动运行垃圾回收器,但无法控制何时删除deleted@IncredibleCoder我不这么认为。在方法中调用del意味着对象必须删除自身,这根本没有意义。我的建议是在主循环中删除它。另外,请注意上面lain的重要评论,举一个简单的例子:
a=Test();a、 某个删除自身()的方法。即使出于某种原因在方法中运行了
del self
,对象仍然会有对它的引用
a
。如果您在某个地方也有
b=a
,那么运行
dela
不会删除该对象,因为现在有另一个对它的引用
b