Python的继承错误
我有以下code.py文件: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):
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。这是漫长的一天,我感谢你不屈不挠的回答。我修正了他的圆圈代码,并离开了广场,作为他的练习。我认为这不值得投反对票。好吧。。我不明白。。但我没有否决你的答案。。除非答案离主题很远,否则我一般不会这么做。。但是,如果你想让他在代码上做一些工作,你应该在那里写。。可能是其他人投了反对票,认为这是错误的答案。。