Python 如何防止取消勾选QObject时出现运行时错误?

Python 如何防止取消勾选QObject时出现运行时错误?,python,pyqt,pickle,Python,Pyqt,Pickle,尝试解除pickleQObject(使用Python 2.7、PyQt4或5、pickle或cPickle)的pickle将引发以下运行时错误: 运行时错误:从未调用类型为QObject的超级类\uuuuu init\uuuuuu() 一个简单的例子: cPickle.load(cPickle.dumps(QtCore.QObject(),cPickle.HIGHEST_协议)) 我知道,根据设计,取消勾选对象不会调用对象的\uuu init\uuu()方法 那么,在这种情况下,如何确保调用超类

尝试解除pickle
QObject
(使用Python 2.7、PyQt4或5、pickle或cPickle)的pickle将引发以下
运行时错误

运行时错误:从未调用类型为QObject的超级类\uuuuu init\uuuuuu()

一个简单的例子:

cPickle.load(cPickle.dumps(QtCore.QObject(),cPickle.HIGHEST_协议))

我知道,根据设计,取消勾选对象不会调用对象的
\uuu init\uuu()
方法

那么,在这种情况下,如何确保调用超类
\uuuu init\uuuu()


提出了一个看似相似的问题,但没有得到回答。

基于的一个可能的解决方案可以实现如下(一个稍微复杂的示例,带有自定义属性):

然后,如有必要,可以使用
setParent()
设置父项

import cPickle
from PyQt5 import QtCore


class MyQObject(QtCore.QObject):
    def __init__(self, parent=None):
        super(MyQObject, self).__init__(parent)
        # Add some custom attribute
        self.some_attribute = 'something'

    def __setstate__(self, state):
        # Restore attributes
        self.__dict__.update(state)
        # Call the superclass __init__()
        super(MyQObject, self).__init__()

original = MyQObject()
pickle_string = cPickle.dumps(original, cPickle.HIGHEST_PROTOCOL)
restored = cPickle.loads(pickle_string)