1

我有私下功能的未使用的參數_f(i)父類中未使用的參數,用於子類。壞政策?

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

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

其目的是在覆蓋方法在子類中

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

有一個未使用的參數感覺醜陋使用的父類,也可節省我從代碼複製的方法g()。有沒有建議的方法來避免它,或者我應該保持原樣嗎?

回答

1

它看起來像目標是重用代碼中g功能使得第二for環路的範圍可以通過類擴展而改變。更好的解決方案是從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功能合同並不需要一個是否要改變選擇添加更多需要在未來功能中使用的輸入。

注:此問題已被標記爲與語言無關。上述代碼中的任何語法錯誤都是故意的。

0

在一些面向面向對象的面向對象的語言,如Java或C#中,有一些將實現委託給子類的抽象方法,但是在Python中,使用它們的唯一方法是使用abc包,另一種方法是與接口。

相關問題Abstract methods in Python