RuntimeError: RuntimeError: super-class __init__() was never called, хотя он был вызван
Cуществует приложение на Python и PyQt5. Имеется некоторый класс пользователя User, наследуемый от класса системы пользователей AqUserSystem. При запуске приложения файлы стандартных и системных пользователей загружаются из JSON, затем на основании полученных данных создаются экземпляры класса пользователя. Проблема заключается в том, что система успешно загружает стандартных пользователей ~!guest!~ u ~!dev!~, но как только дело доходит до создания экземпляра класса пользователя из файла, находящегося в data/personal/, то метод не может создать экземпляр класса, потому что не видит экземпляра AqUserSystem, хотя до этого при создании экземпляров из data/system/ всё было прекрасно. Для вызова ошибки понадобится файл кастомного пользователя, поместить который нужно в data/personal/.
Traceback (most recent call last):
File "G:\Work\Code\Hyrex AsQamm\AsQammDekstopConrol\AsQammDekstop.py", line 91, in <module>
usersCore.loadUsers(usersCore, root)
File "G:\Work\Code\Hyrex AsQamm\AsQammDekstopConrol\_asQamm\asQammUsers.py", line 181, in loadUsers
instance = User(core, root, (jsonString['id']), (jsonString['description']), (jsonString['type']), str(self.item),
RuntimeError: super-class __init__() of type AqUsersSystem was never called
Ответы (2 шт):
RuntimeError: super-class __init__() of type AqUsersSystem was never called
В конструкторы классов добавьте вызов родительского конструктора. Для виджетов Qt это обязательно
У вас я вижу, что нужно вызывать для этих классов:
Выглядит это так:
super().__init__()
Например:
class AqUsersSystem(AqMainWindow):
def __init__(self, root):
super().__init__()
PS.
Можно вызывать родительский конструктор указывая класс родителя напрямую, но мне кажется через super() лучше (тут видно, что наследуем от QMainWindow и от него же вызываем конструктор):
class AqMainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
В строке 181 файла asQammUsers.py все го лишь нужно заменить str(self.item) на str(item). Простая невнимательность!