Python类 - 超级变量

use*_*619 8 python

下面的代码由于某种原因给我一个错误,有人可以告诉我会出现什么问题..

基本上,我创建了2个类Point&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)
Run Code Online (Sandbox Code Playgroud)

错误:

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

And*_*ark 13

看起来您已经修复了原始错误,这是由super().__init__(x,y)错误消息指示引起的,虽然您的修复稍微不正确,而不是您应该使用super(Point, self)Circlesuper(Circle, self).

请注意,是调用另一个地方super()不正确,里面CircleToString()方法:

        return super().ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"
Run Code Online (Sandbox Code Playgroud)

这是Python 3上的有效代码,但在Python 2上super()需要参数,请将其重写如下:

        return super(Circle, self).ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"
Run Code Online (Sandbox Code Playgroud)

我还建议删除线路延续,请参阅PEP 8最大线路长度部分,以获得推荐的修复方法.


Ult*_*nct 7

super(..)只接受新式课程.要修复它,请从中扩展Point类object.像这样:

class Point(object):
Run Code Online (Sandbox Code Playgroud)

使用super(..)的正确方法如下:

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