Попытка скопировать MyClass (QObject) вызывает RuntimeError в Python
Я работаю над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
?1 ответ:
Все, что может сделать
Но даже если бы он знал о базовом объекте, все равно не было бы способа скопировать его, потому что Qt не предоставляет конструктор копирования дляcopy
, - это создать неглубокую копию оболочки python для объекта C++. Это происходит потому, что это функция python, и поэтому она ничего не знает об объекте Qt, который лежит в основе оболочки.QObject
. Поэтому то, о чем вы просите, просто не имеет смысла.В любом случае, я бы предположил, что на самом деле вы этого не делаете. нужно скопировать
QObject
себя. Что вам действительно нужно сделать, так это скопировать определенные атрибутыданных из него - и для этого вы можете легко написать свой собственный метод.