Inheritance error with Python
在code.py有以下文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Shape: def __init__(self, x, y): self.x = x self.y = y def move(self, delta_x, delta_y): self.x += delta_x self.y += delta_y class Square(Shape): def __init__(self, side=1, x=0, y=0): super().__init__(x, y) self.side = side class Circle(Shape): def __init__(self, rad=1, x=0, y=0): super().__init__(x, y) self.radius = rad |
我在运行的Python代码的interpreter这样:
在我得到这个错误:
1 2 3 4 5 | Traceback (most recent call last): ... File"code.py", line 18, in __init__ super().__init__(x, y) TypeError: super() takes at least 1 argument (0 given) |
我不明白为什么我得到这个错误。我在一specifying弧度值1和我assume',由于我不specify X和Y值的,应该是圆的,使用默认值(x = 0和y = 0和通过他们通过超(形)的功能。在缺少的是什么?
顺便说一句,我用Python的组装。
谢谢。
关于这些血淋淋的细节,您可以看到这个问题,或者您可以查看官方文档。
注意,除非您想做一些有趣的事情,否则代码可以简化为
1 | Shape.__init__(self, x, y) |
在这两种情况下。在你理解
终于修好了。:d搜索python文档和旧stackoverflow帖子以获得胜利。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Shape(object): def __init__(self, x, y): self.x = x self.y = y def move(self, delta_x, delta_y): self.x += delta_x self.y += delta_y class Square(Shape): def __init__(self, side=1, x=0, y=0): super(Square,self).__init__(x, y) self.side = side class Circle(Shape): def __init__(self, rad=1, x=0, y=0): super(Circle,self).__init__(x, y) self.radius = rad c = Circle(5) |
这是可行的。您需要通过使顶部父级(形状)继承自对象来使用新的样式类。
参考文献:http://docs.python.org/reference/datamodel.html新闻样式python中的链调用父构造函数
这里有一些代码可以满足您的需要,您还需要使用"新样式类",这意味着基类型需要从对象继承:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Shape(object): def __init__(self, x, y): self.x = x self.y = y def move(self, delta_x, delta_y): self.x += delta_x self.y += delta_y class Square(Shape): def __init__(self, side=1, x=0, y=0): super().__init__(x, y) self.side = side class Circle(Shape): def __init__(self, rad=1, x=0, y=0): super(Circle, self).__init__(x, y) self.radius = rad |
P.S.我只固定了圆圈和左边的正方形供你固定。
使用