我正在研究PyQt5应用程序,并试图了解为什么我不能在从copy.copy
继承的类上使用QObject
这是我的Switcher
类的标题:
class Switcher(QObject):
def __init__(self):
QObject.__init__(self)
self.modified = True
self.integer_sliders = []
self.float_sliders = []
self.checkboxes = []
self.drop_downs = []
(...)
我需要创建两个
Switcher
类的副本,并为此使用copy
:switch = Switcher()
new_switch = copy.copy(switch)
但是,这会抛出一个
RuntimeError
:RuntimeError: super-class __init__() of type Switcher was never called
为什么会发生这种情况,并且可以复制
Switcher
对象? 最佳答案
copy
所能做的就是为C ++对象创建python包装器的浅表副本。这是因为它是python函数,因此对构成包装器的Qt对象一无所知。
但是,即使它确实知道基础对象,也仍然无法复制它,因为Qt不会为QObject
提供复制构造函数。因此,您所要求的完全没有任何意义。
无论如何,我想您实际上并不需要复制QObject
本身。您真正需要做的是复制它的某些数据属性-为此,您可以轻松编写自己的方法。