8

以下のコードは何らかの理由で私にエラーを与えています.誰かが私に何が問題になるのか教えてください..

基本的に、私は Point と Circle の 2 つのクラスを作成します。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)
4

3 に答える 3

13

エラーメッセージが示すように、元のエラーを既に修正しているようですが、使用する必要があるクラスからではsuper().__init__(x,y)なく、修正がわずかに間違っていました。super(Point, self)Circlesuper(Circle, self)

のメソッドsuper()内に、間違って呼び出す別の場所があることに注意してください。CircleToString()

        return super().ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"

これは Python 3 では有効なコードですが、Python 2super()では引数が必要なため、次のように書き換えます。

        return super(Circle, self).ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"

また、行の継続を取り除くことをお勧めします。これを修正するための推奨される方法については、PEP 8 の行の最大長セクションを参照してください。

于 2012-05-31T17:54:03.003 に答える
7

super(..)新しいスタイルのクラスのみを受講します。それを修正するには、 Point クラスを から拡張しobjectます。このような:

class Point(object):

また、super(..) を使用する正しい方法は次のようになります。

super(Circle,self).__init__(x,y)
于 2012-05-31T17:57:59.627 に答える