我是编程新手。这是我下面的简单代码
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
有没有人对此有所了解。
非常感谢
答案 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
不是作为实例而是作为类变量。它将有助于提高代码的可读性