2017-02-17 5 views
0

にスーパークラスの__init__に引数を渡す:私は、そのようにし次のクラスを考えてみましょうのpython

class FordGT(Car): 
    model = "Ford GT" 
    def __init__(self): 
     Car.__init__(self,self.model) 

class Car(): 
    def __init__(self, model): 
     self.model = model 

私は特定のモデルを定義したい場合は、私はこのような何かを行うことができます大量の異なる車種を作り出すことができます。しかし、これを行う際の唯一の問題は、すべての車種について、の機能を繰り返すことです。

def __init__(self): 
    Car.__init__(self,self.model) 

コードの繰り返しは、常に悪いコードの兆候です。どうすればこの問題を解決できますか?子にの init引数をinitを使用せずに親に渡すことは可能ですか?

+0

私は単純化するために車の例を使用しましたが、実際には各クラスが私が探しているパターンを定義する一連の正規表現があります。次に、コードを繰り返さないように、親クラスのすべての処理関数を定義します。 – jhc

答えて

1

まず、その広範な前提を削除する必要があります。繰り返されるコードは必ずしも悪いコードではありません。何かを繰り返すことによって、コード全体がより明確になります。

第2に、__init__が必要な理由、またはスーパークラスメソッドの呼び出しがわかりません。 self.modelは、元々スーパークラスで定義されたメソッドのものであるため、サブクラスで最初に定義されたメソッドからアクセスされた場合と同じです。それは継承の全ポイントです。だから、あなたはただその属性を使うことができます。

+0

うん、私はまったくのinitsを必要としませんでした。ありがとう! – jhc

関連する問題