我有一種情況,基類方法(Python中的__init__
方法)做了很多工作。派生類覆蓋__init__
以簡單地設置對象變量,然後委託給基類__init__
。這工作正常,但現在我有一種情況。所有派生類都使用的基類方法除了一個
我有一些代碼,非常適合在基類__init__
,所有其他派生類除了一個(稱之爲A
)需要使用。想象一下,如果基類__init__
是這樣的。
def __init__(self):
Action 1...
Action 2...
現在,所有的派生類直接委託給這個。但是,A
應該只有行動2在其__init__
。現在這個觀點很難看。我可以將Action 1和Action 2分成兩個獨立的函數,並讓基類簡單地調用Action2
。然後大多數類會有他們的init這樣的東西。
def __init__(self):
self.Action1()
Other init code...
super().__init__()
和A
類,這將是
def __init__(self):
Some init code....
super().__init__()
但是你可以看到,有一段代碼(調用self.Action1
說)我在最派生類的重複。這不好。我不確定如何用最少的重複代碼優雅地編寫代碼,並且需要一些關於如何去做的建議。
典型的回答是_maybe A不是一個子類really_。考慮把A作爲父類(在層次結構中更高,而不是更低) – Aganju
在調用super()函數後''''''''''''你可以*撤銷*''' )'''? – wwii
@Aganju A是一個孩子。基類包含很多通用代碼。子類實現了一些方法,使它們適合更大的框架。 –