首页 > 解决方案 > Error when trying to override __init__() : TypeError: __init__() takes 1 positional argument but 2 were given

问题描述

I beleive that this error has to do with how I am passing kwargs into my base init, but I am not sure what I am doing wrong here. Could someone enlighten me? I simply want this code to print out "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()

Here is the full error:

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

标签: pythonpython-3.xinheritance

解决方案


每个类init方法都有self一个参数,允许向这个新创建的类实例添加属性。调用结果super().__init__(self, **kwargs)到. 基本构造函数只接受一个参数,因此会引发错误。Child.initBase(Child, **kwargs)


推荐阅读