2016-11-09 15 views
0

私はお互いに拡張する3つのクラスを持っています。Python:子クラスのコンストラクタ引数で親のクラスパラメータを取得する方法

class GeometricObject: 
    def __init__(self): 
     self.lineColor = 'black' 
     self.lineWidth = 1 

    def getColor(self): 
     return self.lineColor 

    def getWidth(self): 
     return self.lineWidth 

class Shape(GeometricObject): 
    def __init__(self, color): 
     self.fillColor = color 

class Polygon(Shape): 
    def __init__(self, cornerPoints, lineWidth = ?, lineColor = ?): 
     self.cornerPoints = cornerPoints 
     self.lineColor = lineColor 
     self.lineWidth = lineWidth 

ここでは簡単な質問があります。私はlineWidthとlineColorの値をデフォルトにし、それをGeometricObjectクラスで与えられた値に設定したいと思います。私はそれをデフォルトしない場合、私は常に3つのパラメータをPolygonクラスのコンストラクタに渡す必要があります。そしてこれが私が避けようとしていることです。 lineWidthとlineColorが渡されない場合、値はデフォルトで設定されます。

提案がありますか?

+0

サイドノート:何falsy値はPolygonで許可されていない場合

、then文を置き換えることができるならば、なぜ 'GeometricObject'は' lineWidth'パラメータとして 'lineColor'を取りませんか?なぜ孫だけがカスタマイズするのですか?また、Pythonでは 'camelCase'ではなく' snake_case'を使うべきです。 –

答えて

1
class GeometricObject: 
    def __init__(self): 
     self.lineColor = 'black' 
     self.lineWidth = 1 

     # getters 

class Shape(GeometricObject): 
    def __init__(self, color): 
     super().__init__() 
     self.fillColor = color 

class Polygon(Shape): 
    def __init__(self, cornerPoints, color, lineWidth=None, lineColor=None): 
     super().__init__(color) 
     self.cornerPoints = cornerPoints 
     if lineColor is not None: 
      self.lineColor = lineColor 
     if lineWidth is not None: 
      self.lineWidth = lineWidth 

あなたが欠けていた主なものであるスーパーコンストラクタへの呼び出しを追加しました。あなたのコードでは、__init__が呼び出されます。これは、不足しているcolorパラメータをPolygonに追加する必要があることを意味します。

self.lineColor = lineColor or self.lineColor 
    self.lineWidth = lineWidth or self.lineWidth 
+0

私は解決策を理解しませんでした。 "カラー"は何をしているのですか? –

+0

@RahulDevMishraスーパーコンストラクタ、つまり 'Shape'のコンストラクタに渡すこと。どのように色を設定するつもりですか?あなたのコードと 'cornerPoints = [];を実行してみてください。 p =ポリゴン(cornerPoints); print(p.fillColor) 'です。何が起こると思いますか? –

関連する問題