1

私はプライベート関数で未使用の引数を持つことは醜いと感じ、それが保存されますサブクラスで使用される親クラスの未使用引数。悪い方針?

class Child: 
    def _f(i): 
     return range(i, m) 

サブクラスでオーバーライドされた方法で使用されることを意図して_f(i)

class Parent: 
    def _f(i): 
     return range(m) 

    def g(): 
     for i in range(n) 
      for j in _f(i) 
       # do something 

を未使用の引数を持つ親クラスを持っていますメソッドg()のコード複製からの私。それを避けるための提案された方法はありますか、それをそのまま残すべきですか?

答えて

1

目的は、第二forループの範囲は、クラス拡張を介して変更することができるようg関数でコードを再利用することであるようです。より良い解決策は、f関数のiパラメータを完全に取り除き、代わりにインスタンス変数を使用することです。

親クラス

class Parent: 
    def _f(): 
     return range(m) 

    def g(): 
     for i in range(n) 
      for j in _f() 
       # do something 

子クラス

class Child: 
    def __init__(self, i): 
     self.i = i 

    def _f(): 
     return range(self.i, m) 

このアプローチの直接の利点は、f機能のための契約が1ならば変更する必要がないということでしょう将来関数内で使用する必要のある入力をさらに追加することを選択します。

注:この質問は言語に依存しないとマークされています。上記のコードの構文上の誤りは意図的です。

0

JavaやC#のようないくつかのOOP指向言語では、インプリメンテーションを子クラスに委譲する抽象メソッドがありますが、Pythonではそれらを使用する唯一の方法はabcパッケージです。インターフェイス付き。

関連質問Abstract methods in Python

関連する問題