2017-05-30 8 views
-1

タスクは、 'Shape'という名前のクラスとそのサブクラス 'Square'を定義することです。 Squareクラスには、与えられた長さを引数として取る 'init'関数があります。両方のクラスには、シェイプの領域がデフォルトで0であるシェイプの領域を印刷できる領域関数があります。Pythonでサブクラスとスーパークラスを使用してこのタスクを完了する方法がわからない

これは私が現時点で持っているものです。

class Shape: 
    area = 0 
    def __init__(self, ??): 



class Square(Shape): 

    def __init__(self, length): 
     self.length = length 

    def area(self): 
     a = (self.length * self.length) 
     print('The area of a square with a side length of %f is %f' % (self.length, a)) 


s = Square(2) 
s.area() 

私はシェイプスーパークラスで何をすべきかがわからないと思います。

+1

Shapeは抽象クラスでなければなりません。その場合、抽象的な領域のメソッドを定義することができます。その後、サブクラスの実装を提供します。 – MeterLongCat

+0

スーパークラスに 'print_area(self)'メソッドを持たせることをお勧めします。このメソッドは、フィールド領域を表示し、サブクラスの '__init__'メソッドで初期化し、上書きする機能はありませんサブクラス内の領域 – Chris

+2

_ "どちらのクラスも領域関数を持っています" _ 'area = 0'は関数ではありません。あなたはそれを修正することから始めることができます。 –

答えて

0

私は、クラスのデフォルト機能areaを無効にしたいと思うでしょう。次に、形のリスト - ShapeSquare、さらにはPolygonのいずれかである場合は、どのクラスであるか知らずにareaを呼び出すだけですべて印刷できます。多型!

class Shape: 
    def __init__(self): 
     pass 

    def area(self): 
     print(0) 

サブクラスのインスタンスを作成するときにスーパークラスのコンストラクタを呼び出すことも重要です。スーパークラスの内部構造にいくつかの必要な開始があるかもしれません:

class Square: 
    def __init__(self, length): 
     self.length = length 
     super(Square, self).__init__() 
関連する問題