下面是我的类定义:
class Playingsound:
def ___init___(self):
# blah
def fadeout_and_stop(self):
# do somthing (fadeout during 100 ms)
del self
这是我的问题(类似于那个问题:Python object deleting itself):
^{pr2}$
相反,我希望a
在调用fadeout_and_stop
之后被完全销毁,它的引用是None
:
>>> a
<None>
如何使用Python实现这一点?在
Tags:
在python中不能销毁对象。这是垃圾收集者的工作。您可以做的是将引用更改为“无”或删除该引用。但是如果对象仍然有其他的引用链接,它将保持在内存中而不会受到伤害。看看这个例子
看,值为8的对象(在t=ListNode(8)行创建)仍然是活动的。我们只销毁了t的引用,但实际对象在python的垃圾回收器手中。只有当我们删除另一个引用链接(l1.next)时,该对象将丢失所有引用链接并成为垃圾,然后python将从内存中完全销毁它。因此,虽然您可以完全控制引用,但无法控制实际对象。在
只需尝试在finish函数中的“delself”语句后打印self,这样做会因为python内存管理而出错。在为类a创建“a”对象之后,此对象“a”将被标记到某个内存位置,当您调用finish()时,您将传递“a”对象的引用。所以当你使用del self时,内存引用将不加标记的对象,但我们的对象仍然是'a'指向那个内存位置。你需要取消标记所有引用才能销毁该对象。在
如果不遍历垃圾收集器中的所有引用,并测试每一个引用是否是对该对象的引用,然后将该引用设置为
None
。你不想去那里。记住:可以有多个对对象的引用:不是} clean-up hook 相结合。在
a.finish()
,而是del a
,可能与实现^{如果超时后需要清理对象,请将对象添加到全局列表中,并在播放结束后将其从该列表中删除。列表可以在类本身上:
^{pr2}$如果没有其他引用实例,Python将负责为您清理:
您始终可以通过
Playingsound.playing
访问任何仍在播放的声音。在相关问题 更多 >
编程相关推荐