2016-07-15 4 views
-1

コンストラクタメソッドinitをオーバーロードして1つの引数(辺の長さ)しか持たないようにし、領域を計算するメソッド領域をオーバーライドします。私はこのプログラムを考え出しましたが、 "未定義の名前ポリゴン"と言っています。PolygonクラスのサブクラスとしてSquareクラスとTriangleクラスを実装します

class Square(Polygon): 
    'square class' 

    def __init__(self, s): 
     'constructor that initializes the side length of a square' 
     Polygon.__init__(self, 4, s) 

    def area(self): 
     'returns square area' 
     return self.s**2 

from math import sqrt 
class Triangle(Polygon): 
    def __init__(self, s): 
     'constructor that initializes the side length of an equilateral triangle' 
     Polygon.__init__(self, 3, s) 

    def area(self): 
     'returns triangle area' 
     return sqrt(3)*self.s**2/4 
+0

'' 'Polygon'''クラス(他の2つより先)を定義しましたか? – wwii

+0

私は理解していません。私はまだこれに新しいことがあります。 – user6523697

答えて

0

あなたはPolygonを継承したい場合、あなたはそれを継承他のクラスを定義する前に、それを定義する必要があります。

class Polygon: 
    def __init__(self): 
     pass 
    def area(self): 
     raise NotImplemented 

class Square(Polygon): 
    'square class' 

    def __init__(self, s): 
     'constructor that initializes the side length of a square' 
     Polygon.__init__(self, 4, s) 

    def area(self): 
     'returns square area' 
     return self.s**2 

from math import sqrt 
class Triangle(Polygon): 
    def __init__(self, s): 
     'constructor that initializes the side length of an equilateral triangle' 
     Polygon.__init__(self, 3, s) 

    def area(self): 
     'returns triangle area' 
     return sqrt(3)*self.s**2/4 
関連する問題