我有以下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.
谢谢.
super需要一个参数,这正是错误信息所说的.在你的情况下,你需要使用super(Circle, self)和super(Square, self).
有关血淋淋的细节,您可以看到这个问题,或者您可以查看官方文档.
请注意,除非您想做有趣的事情,否则可以简化代码
Shape.__init__(self, x, y)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下.直到你理解super为什么它有用它我建议只是远离它.作为一名高效的Python程序员,您可以过上幸福的生活,而不必接触它.