下面的代码由于某种原因给我一个错误,有人可以告诉我这是什么问题。
基本上,我创建了2个Point&Circle类。Circle正在尝试继承Point类。
Code:
class Point():
x = 0.0
y = 0.0
def __init__(self, x, y):
self.x = x
self.y = y
print("Point constructor")
def ToString(self):
return "{X:" + str(self.x) + ",Y:" + str(self.y) + "}"
class Circle(Point):
radius = 0.0
def __init__(self, x, y, radius):
super(Point,self).__init__(x,y)
self.radius = radius
print("Circle constructor")
def ToString(self):
return super().ToString() + \
",{RADIUS=" + str(self.radius) + "}"
if __name__=='__main__':
newpoint = Point(10,20)
newcircle = Circle(10,20,0)
错误:
C:\Python27>python Point.py
Point constructor
Traceback (most recent call last):
File "Point.py", line 29, in <module>
newcircle = Circle(10,20,0)
File "Point.py", line 18, in __init__
super().__init__(x,y)
TypeError: super() takes at least 1 argument (0 given)
看起来您可能已经修复了原始错误,该错误是由super().__init__(x,y)
错误消息所指示的,尽管您的修复稍有不正确,而不是应该使用super(Point, self)
的Circle
类super(Circle, self)
。
请注意super()
,在Circle
的ToString()
方法中还有一个错误调用的地方:
return super().ToString() + \
",{RADIUS=" + str(self.radius) + "}"
这在Python 3上是有效的代码,但是在Python 2上super()
需要自变量,将其重写如下:
return super(Circle, self).ToString() + \
",{RADIUS=" + str(self.radius) + "}"
我还建议您取消行的延续,有关解决此问题的建议方法,请参见PEP
8
的“最大行长”部分。
主要内容:PHP 超级全局变量,PHP $GLOBALS,实例,PHP $_SERVER,实例,PHP $_REQUEST,实例,PHP $_POST,实例,PHP $_GET,实例超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。 PHP 超级全局变量 PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。 PHP 超级全局变量列表: $GLO
问题内容: 我在使用Python super()和继承和属性时遇到了一个非常奇怪的问题。一,代码: 这很好。但是,我想要的(对我来说似乎是Pythonic) 即使不起作用 得到很好的价值。在这种情况下,x是同时定义了fset和fget的超类的属性。那为什么不起作用呢? 问题答案: 我试图找到正确的语言来支持这种行为的原由,以免给您一个“因为它就是”答案……但是似乎这个问题已经被问了不止一次了,并且
我试图为一个最常见的场景编写一个单元测试。 问题是,到目前为止,测试失败了。当我试着调试测试时,我观察到null被注入到props中,这导致了NPE。当我从测试中删除类实现时,我可以看到props mock工作正常,但在m1()调用中失败了。有人能帮我一下我缺少什么吗?我试着用MockB b引用道具,比如b.props,但这也是NPE。非常感谢您的帮助。
我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。
问题内容: 我有一个带有很多参数的基类: 所有继承类都应运行基类的方法。 我可以在每个继承的类中编写一个将调用超类的方法,但这将是严重的代码重复: 自动调用超类的最Pythonic方法是什么? 问题答案: 如果有助于解决您的噩梦,请考虑使用 args和* kw。
问题内容: 为什么我们不能覆盖子类中超类的实例变量? 问题答案: 因为如果您更改数据成员的实现,则很有可能会破坏超类(想象将超类的数据成员从float更改为String)。