Попытка скопировать 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 2

1 ответ:

Все, что может сделать copy, - это создать неглубокую копию оболочки python для объекта C++. Это происходит потому, что это функция python, и поэтому она ничего не знает об объекте Qt, который лежит в основе оболочки.

Но даже если бы он знал о базовом объекте, все равно не было бы способа скопировать его, потому что Qt не предоставляет конструктор копирования дляQObject. Поэтому то, о чем вы просите, просто не имеет смысла.

В любом случае, я бы предположил, что на самом деле вы этого не делаете. нужно скопировать QObject себя. Что вам действительно нужно сделать, так это скопировать определенные атрибутыданных из него - и для этого вы можете легко написать свой собственный метод.