为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2021-07-22 18:12:40
我想创建派生自 PyQt5QtWidget.QWidget和abc.ABCMeta. 这两个类都有自己的元类作为类型,因此,根据this page和this SO question,我需要创建自己的元类,该元类派生自QWidgetand的元类abc.ABCMeta,并明确地将其用作我的类的元类。到目前为止QtAbcMeta一切顺利,我已经定义了一个类并将其用作metaclass我的ConcreteWidget类(见下文)。import abcfrom PyQt5 import QtWidgets, QtCoreclass AbstractClass(metaclass=abc.ABCMeta):    def __init__(self, name):        self._name = name    @abc.abstractmethod    def myMethod():        passclass QtAbcMeta(type(QtWidgets.QWidget), type(AbstractClass)):    passclass 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__不知何故改变了?任何帮助,将不胜感激。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号