如何知道如果对象被Python中删除(How to know if object gets dele

2019-06-26 00:59发布

我在堆中的对象和对它的引用。 有某些情况下在该对象被删除,但指向的位置不知道的参考。 如何检查是否存在堆中真实的数据?

例如:

from PySide import *
a = QProgressBar()
b = QProgressBar()
self.setIndexWidget(index,a)
self.setIndexWidget(index,b)

然后, a对象被删除,但print(a)返回一个有效的地址。 不过,如果你尝试a.value() -发生运行时错误(C ++对象已被删除)。

a is None返回False

Answer 1:

利用sip模块,阅读更多关于sip 这里

import sip

a = QProgressBar()
sip.isdeleted(a)
False

sip.delete(a)
a
<PyQt4.QtCore.QObject object at 0x017CCA98>

sip.isdeleted(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: underlying C/C++ object has been deleted


Answer 2:

对于PySide对象,您将需要shiboken模块执行对象查询。

访问shiboken模块机制的文档 :

import shiboken

print shiboken.isValid(a)


Answer 3:

它在文档中当一个对象需要另一个对象的缺失责任明确提到。 在你的榜样,您可以在此看到Qt的文档 :

如果索引插件A被替换为索引插件B,索引插件A将被删除。



文章来源: How to know if object gets deleted in Python
标签: python pyside