为啥我收到错误:__init__() 缺少 1 个必需的位置参数?

Posted

技术标签:

【中文标题】为啥我收到错误:__init__() 缺少 1 个必需的位置参数?【英文标题】: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 以便您知道该怎么做。 为什么要创建这些元类?无论如何都不需要它们。 【参考方案1】:

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

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

(强调我的)

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

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

【讨论】:

以上是关于为啥我收到错误:__init__() 缺少 1 个必需的位置参数?的主要内容,如果未能解决你的问题,请参考以下文章

错误:__ init __()缺少1个必需的位置参数:'rec'

如何修复modelformset错误:__init __()缺少1个必需的位置参数:'user'

类型错误:__init__() 缺少 2 个必需的位置参数:“arr”和“n”

__init__() 缺少 1 个必需的位置参数:'self' [关闭]

为啥我会收到错误数量的参数错误?

Django 2.1.3 错误:__init__() 采用 1 个位置参数,但给出了 2 个