python继承错误

Inheritance error with Python

在code.py有以下文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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代码的interpreter这样:

>>> import code >>> c = code.Circle(1)

在我得到这个错误:

1
2
3
4
5
Traceback (most recent call last):
...
File"code.py", line 18, in __init__
super().__init__(x, y)
TypeError: super() takes at least 1 argument (0 given)

我不明白为什么我得到这个错误。我在一specifying弧度值1和我assume',由于我不specify X和Y值的,应该是圆的,使用默认值(x = 0和y = 0和通过他们通过超(形)的功能。在缺少的是什么?

顺便说一句,我用Python的组装。

谢谢。


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

关于这些血淋淋的细节,您可以看到这个问题,或者您可以查看官方文档。

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

1
Shape.__init__(self, x, y)

在这两种情况下。在你理解super和它为什么有用之前,我建议你还是远离它。作为一个高效的python程序员,你可以过上幸福的生活而不必去碰它。


终于修好了。:d搜索python文档和旧stackoverflow帖子以获得胜利。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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(Square,self).__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

c = Circle(5)

这是可行的。您需要通过使顶部父级(形状)继承自对象来使用新的样式类。

参考文献:http://docs.python.org/reference/datamodel.html新闻样式python中的链调用父构造函数


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

P.S.我只固定了圆圈和左边的正方形供你固定。


使用super(Shape, self),您可以在python中使用help(super)