如何在python中销毁对象?
我有一个timer类,我设计它只启动一次,然后(最好)删除它自己。我有没有办法实现这种自我删除如何在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):
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