Python的继承错误

Python的继承错误,python,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):

我有以下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
我在Python解释器中运行的代码如下:

>>导入代码

>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>
回溯(最近一次呼叫最后一次):

文件“code.py”,第18行,在\uuuu init\uuu\br> super()。\uuuu init\uuuu(x,y)
TypeError:super()至少接受1个参数(给定0)
我不明白为什么我会犯这个错误。我将rad值指定为1,我假设由于我没有指定x和y值,Circle应该使用默认值x=0和y=0,并通过super()函数将它们传递给Shape。我错过了什么

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


谢谢。

使用
super(Shape,self)
相反,您可以使用python中的
help(super)

super
需要一个参数,这正是错误消息所说的。在您的情况下,您需要使用
super(圆圈,self)
super(正方形,self)

关于血淋淋的细节,你可以查看,也可以查看官方文件

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

Shape.__init__(self, x, y)

在这两种情况下。在您理解超级以及为什么它会有用之前,我建议您远离它。作为一名多产的Python程序员,您可以过上幸福的生活,而不必触及这一点。

这里有一些代码可以满足您的需要,您还需要使用“新样式类”,这意味着基类型需要从对象继承:

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

顺便说一句,我只给你们修了一个圆圈和一个正方形。

终于修好了D搜索python文档和旧的Stackoverflow帖子以获得胜利

类形状(对象):
定义初始化(self,x,y):
self.x=x
self.y=y
def移动(自身、增量x、增量y):
self.x+=delta_x
self.y+=delta_y
类方形(形状):
def uuu init uuuu(self,side=1,x=0,y=0):
超级(平方,自).\uuuu初始(x,y)
self.side=side
类圆(形状):
定义初始值(自,rad=1,x=0,y=0):
超级(圆,自).\uuuu初始(x,y)
自半径=rad
c=圆(5)
这很有效。您需要通过使顶部父对象(形状)从对象继承来使用新样式类

参考资料:

仔细查看错误消息
super()
至少接受一个参数。这与您的
x
y
值没有任何关系。另外,请确保
Shape
继承自
object
。看起来这是为Python 3编写的。在Python2.7中,
super()
需要参数。我独自坐在电脑前试图学习Python。我怀疑这是2.x版和3.0版的问题。对不起,我没有你们其他人聪明。谢谢6502。这是漫长的一天,我感谢你不屈不挠的回答。我修正了他的圆圈代码,并离开了广场,作为他的练习。我认为这不值得投反对票。好吧。。我不明白。。但我没有否决你的答案。。除非答案离主题很远,否则我一般不会这么做。。但是,如果你想让他在代码上做一些工作,你应该在那里写。。可能是其他人投了反对票,认为这是错误的答案。。