【问题标题】:Why am I getting the error: __init__() missing 1 required positional argument?为什么我收到错误:__init__() 缺少 1 个必需的位置参数?
【发布时间】:2021-09-02 03:59:27
【问题描述】:

Fedora 34、Python 3.9.5

我用一个继承自其他两个类(其中一个继承了 QWidget 功能)的类编写代码。结果,这个简单的类没有被初始化。

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget
 
class M_A(type(QWidget), type):pass
class A(QWidget, metaclass=M_A):
    def __init__(self):
        QWidget.__init__(self)
         
class B:
    def __init__(self, controller):
        self.controller = controller
         
         
class M_C(type(A), type(B)):pass
class C(A, B, metaclass=M_C):
    def __init__(self, controller):
        A.__init__(self)
        B.__init__(self, controller)
         
         
app = QtWidgets.QApplication([])
C(controller=19)


Traceback (most recent call last):
  File "/home/ivan/eclipse-workspace/123/Exp.py", line 22, in <module>
    C(controller=19)
  File "/home/ivan/eclipse-workspace/123/Exp.py", line 17, in __init__
    A.__init__(self)
  File "/home/ivan/eclipse-workspace/123/Exp.py", line 7, in __init__
    QWidget.__init__(self)
TypeError: __init__() missing 1 required positional argument: 'controller'

错在哪里?

【问题讨论】:

  • 在 SOLVED 未添加到帖子标题中,请查看tour 以便您知道该怎么做。
  • 为什么要创建这些元类?无论如何都不需要它们。

标签: python python-3.x pyqt5 metaclass


【解决方案1】:

官方实现混合示例中的docs指出

这遵循与我们的 Person 实现类似的模式,但请注意我们为 age 参数提供了默认值

(强调我的)

应用于你的case控制器必须有一个默认值,例如0:

class B:
    def __init__(self, controller=0):
        self.controller = controller

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 2022-01-11
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多