从两个元类派生时在 __init__ 中键入错误

我想创建派生自 PyQt5QtWidget.QWidget和abc.ABCMeta. 这两个类都有自己的元类作为类型,因此,根据this page和this SO question,我需要创建自己的元类,该元类派生自QWidgetand的元类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方法来设置父级时,我得到以下类型错误:


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__不知何故改变了?任何帮助,将不胜感激。


呼唤远方
浏览 151回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python