子类的__init__函数是否需要包含父类的__init__函数中使用的所有参数?

时间:2018-05-04 19:04:41

标签: python-3.x class inheritance

我已经定义了一个继承自A类的子类B.我想在B的__init__函数中只给出一个参数.A的__init__函数需要四个参数,这些参数是在A.的__init__函数。我想知道这是否适用于Python 3.我的代码在某种程度上将如下所示。

class A():
     __init__(self,a1,a2,a3,a4):
          ...
class B(A):
     __init__(self,b):
          ...
          # the arguments a1 a2 a3 a4 for the parent class are generated
          a1 = ...
          a2 = ...
          a3 = ... 
          a4 = ...
          # call the __init__ function of the parent class using super
          super().__init__(a1,a2,a3,a4)

object = B(b0)

我复制并修改了另一个使用Python 2的人的代码。当我在Python 3中运行代码时,出现以下错误: __init__()缺少4个必要的位置参数:' a1',' a2',' a3'和' a4'。我想知道这是否是因为我没有在B的__init__()中包含A所需的参数。

更新

我刚注意到有一个错字。我写了_init_(self, b)(带有单下划线),我应该使用___init__(self, b)(双下划线)。修复此错字后,错误没有出现。所以我的问题的答案是" no"。

1 个答案:

答案 0 :(得分:-1)

很快,答案是否定的。这适用于Python3。除了SyntaxError之外,您似乎没有任何错误。另外,如果您有任何疑问,请将您的代码提供为Minimal, Complete, and Verifiable example,例如:

class A:
    def __init__(self, a1, a2, a3, a4):
       pass

class B(A):
    def __init__(self, b):
        super().__init__(1,2,3,4)

A(1,2,3,4)
B(1) # no error