2012-05-31 10 views
8

以下の作品は私にいくつかの理由でエラーを与えている、誰かが問題にどうなるかを教えてもらえます。..Pythonクラス - コードのスーパー変数

基本的に、私は2クラスが& Circle..THeをポイント作成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) 
+0

あなたがソースに、いくつかの編集を行いましたか?あなたの 'init'呼び出しは元々そのように見えましたか? –

+4

'ToString'、ああ!私の(pythonic)目が出血しています – juliomalegria

答えて

13

これはあなたの修正が少し間違っていましたが、あなたはすでに、エラーメッセージが示すようにsuper().__init__(x,y)により引き起こされた元のエラーを修正したことのように見えるのではなく、super(Point, self)からCircleクラスの場合は、super(Circle, self)を使用してください。誤っsuper()を呼び出して別の場所CircleToString()方法の内、があることを

注:

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

これは、Python 3に有効なコードですが、Pythonの2にsuper()は引数が必要、としてこれを書き換えます次

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

また、私はこれを固定する推奨方法のためMaximum Line Length section of PEP 8を参照して、行の継続を取り払うことをお勧めします。

+0

エラーメッセージは明示的にそのラインからのエラーではないと述べています。 –

+0

@ MarkRansom - そうです!ありがとう。 –

+0

'ToString()'は正しい考え方ではないことが推奨されます。これは '__str__'の目的です。 – juliomalegria

7

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

class Point(object): 

また、スーパー(..)を使用しての正しい方法は次のようである:

super(Circle,self).__init__(x,y) 
0
class Point(object): 

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,object): 
radius = 0.0 

def __init__(self, x, y, radius): 
    super(Circle,self).__init__(x,y) 
    self.radius = radius 
    print("Circle constructor") 

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


if __name__=='__main__':  
    newpoint = Point(10,20)  
    newcircle = Circle(10,20,0) 
関連する問題