尝试覆盖__init __()时出错:TypeError:__init __()接受1个位置参数,但给出了2个位置

时间:2020-03-28 14:57:10

标签: python python-3.x inheritance

我相信这个错误与我将kwargs传递给我的基本init有关,但是我不确定在这里我做错了什么。有人可以启发我吗?我只是希望此代码打印出“ 1 2”

def main():
   child = Child(2, first=1)
   child.display()


class Base():

   def __init__(self, **kwargs):
       print(kwargs.get("first", "nice try"))


class Child(Base):

   def __init__(self, value, **kwargs):
       super().__init__(self, **kwargs)
       self.value = value

   def display(self):
       print(self.value)


main()

这是完整的错误:

 super().__init__(self, **kwargs)
 TypeError: __init__() takes 1 positional argument but 2 were given

1 个答案:

答案 0 :(得分:0)

每个类init方法都以self作为参数,以允许向该新创建的类实例添加属性。 在super().__init__(self, **kwargs)中调用Child.init将导致Base(Child, **kwargs)。基本构造函数仅接受一个参数,因此会引发错误。