Python的继承错误

Ray*_*Ray 2 python

我有以下code.py文件:

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
Run Code Online (Sandbox Code Playgroud)

我正在Python解释器中运行代码,如下所示:

>>> import code
>>> c = code.Circle(1)

我收到这个错误:

Traceback (most recent call last):<br>
...<br>
File "code.py", line 18, in __init__<br>
super().__init__(x, y)<br>
TypeError: super() takes at least 1 argument (0 given)<br>
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我会收到这个错误.我指定的rad值为1,我会假设因为我没有指定x和y值,所以Circle应该使用默认值x = 0和y = 0并通过super()将它们传递给Shape功能.我错过了什么?

顺便说一句,我使用的是Python 2.7.1.

谢谢.

650*_*502 7

super需要一个参数,这正是错误信息所说的.在你的情况下,你需要使用super(Circle, self)super(Square, self).

有关血淋淋的细节,您可以看到这个问题,或者您可以查看官方文档.

请注意,除非您想做有趣的事情,否则可以简化代码

Shape.__init__(self, x, y)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下.直到你理解super为什么它有用它我建议只是远离它.作为一名高效的Python程序员,您可以过上幸福的生活,而不必接触它.