How to know if object gets deleted in Python

余生颓废 提交于 2019-11-27 07:57:01

问题


I have an object in the heap and a reference to it. There are certain circumstances in which the object gets deleted but the reference that points to its location doesn't know that. How can I check if there is real data in the heap?

For example:

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

Then the a object gets deleted but print(a) returns a valid address. However if you try a.value() - runtime error occurs (C++ object already deleted).

a is None returns False.


回答1:


use sip module, read more about sip here

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



回答2:


For the PySide objects you'll need the shiboken module to perform object queries.

Visit the shiboken module documention:

import shiboken

print shiboken.isValid(a)



回答3:


It is explicitly mentioned in the documentation when an object takes the responsibility for the deletion of another object. In your example, you can see this in the Qt doc :

If index widget A is replaced with index widget B, index widget A will be deleted.



来源:https://stackoverflow.com/questions/11328219/how-to-know-if-object-gets-deleted-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!