解决错误TypeError:__ init __()需要1个位置参数,但是给出了2个

时间:2015-01-05 21:03:53

标签: python inheritance

我是编程新手。这是我下面的简单代码

class BaseClass(object):
    def __init__(self):
        self.value = 10

        def add(self):
            c = self.value + 10
            print("the sum is:")
            print(c)

class InheritingClass(BaseClass):
    pass

x = InheritingClass(BaseClass)

我正在使用python进行继承。当我运行此脚本时,我收到此错误

Traceback (most recent call last):
  File "F:/python/classes_01.py", line 20, in <module>
    x = InheritingClass(BaseClass)
TypeError: __init__() takes 1 positional argument but 2 were given

有没有人对此有所了解。

非常感谢

5 个答案:

答案 0 :(得分:6)

您无需将BaseClass传递给构造函数。只需做

x = InheritingClass()

答案 1 :(得分:3)

只需使用:

创建InheritingClass对象
x = InheritingClass()

为什么?因为超类已在类定义中指定:

class InheritingClass(BaseClass):
    pass

所以没有必要再次指定它。

答案 2 :(得分:1)

编码时:

class InheritingClass(BaseClass):

您表示继承类继承自BaseClass(即是子类)。您没有提供有关如何创建InheritingClass实例的任何信息。该信息位于 init 方法中。

在这种情况下,InheritingClass从BaseClass继承其__init__方法,其中没有指定/必需的用户提供的输入。只需使用

x = InheritingClass()

创建InheritingClass的实例,与使用

的方式相同
x2 = BaseClass()

创建BaseClass的实例

答案 3 :(得分:1)

就像已经说过的那样,只需编写x = InheritingClass()

请记住:类的每个方法都至少有一个参数,那就是 self 。 这就是为什么你总是要在类的方法定义中编写self。但是当你 调用你不必将函数传递给函数的函数:

class A:
    ...
    def foo(self):
        print "bla"

    ...


#call foo
a = A()
a.foo() # self is implicitly there

答案 4 :(得分:0)

value必须添加到的构造方法的参数中 __init__。 另外,您应该声明value不是作为实例而是作为类变量。它将有助于提高代码的可读性