Я хотел бы создать класс, производный от PyQt5 QtWidget.QWidget
и abc.ABCMeta
.Оба этих класса имеют свой собственный метакласс как тип, поэтому в соответствии с этой страницей и этим SO вопросом мне нужно создать свой собственный метакласс, производный от метаклассов QWidget
и abc.ABCMeta
, и явно использовать это как метакласс для моего класса.
Пока все хорошо, я определил класс QtAbcMeta
и использовал его как metaclass
для своего класса ConcreteWidget
(увидеть ниже).
import abc
from PyQt5 import QtWidgets, QtCore
class AbstractClass(metaclass=abc.ABCMeta):
def __init__(self, name):
self._name = name
@abc.abstractmethod
def myMethod():
pass
class QtAbcMeta(type(QtWidgets.QWidget), type(AbstractClass)):
pass
class ConcreteWidget(QtWidgets.QWidget, AbstractClass, metaclass=QtAbcMeta):
def __init__(self, name, parent=None):
AbstractClass.__init__(self, name)
QtWidgets.QWidget.__init__(self, parent=parent) # This gives a type error.
def myMethod():
print("My widget does something")
def main():
app = QtWidgets.QApplication([])
myWidget = ConcreteWidget('my name', parent=None)
if __name__ == "__main__":
main()
Однако, когда я пытаюсь вызвать метод __init__
метода QtWidgets.QWidget
, чтобы установить родителя, я получаю следующую ошибку TypeError:
Traceback (most recent call last):
File "main.py", line 36, in <module>
main()
File "main.py", line 33, in main
myWidget = ConcreteWidget('my name', parent=None)
File "main.py", line 24, in __init__
QtWidgets.QWidget.__init__(self, parent=parent) # This gives a type error.
TypeError: __init__() missing 1 required positional argument: 'name'
У меня естьПонятия не имею, что здесь не так.Изменилась ли как-то подпись QtWidgets.QWidget.__init__
?Любая помощь будет оценена.