在Python中,我使用了一個框架,讓我掛接到一個生命週期,像這樣:python mixin的方法不能被覆蓋(默認)?
class MyView(BaseView):
def pre_save(self):
print "view presave"
我想寫一個mixin做一些pre_save
,但我已經有很多的代碼在大量的類如上所述使用pre_save
,而不呼叫super()
。如果我這樣加入我的mixin:
class MyMixin(object):
def pre_save(self):
print "mixin presave"
class MyView(MyMixin, BaseView):
def pre_save(self):
print "view presave"
它自然地覆蓋mixin,並僅打印「查看預置」。有沒有另外一種偷偷摸摸的方式,我可以寫MyMixin
以不強制所有的客戶意見記得打電話給super()
?
不,沒有別的方法,只能從所有'pre_save()'方法中調用'super()'。如果存在'BaseView.pre_save()'(並且什麼也不做,甚至不調用'super()'),那麼隨處使用'super()'(mixin,具體視圖)將確保所有調用都被正確鏈接。 –
在平凡的編程錯誤上打樁「偷偷摸摸的方式」只會增加一些應該修復的問題。修正你的觀點,以便他們正確地發出'超級'通話,從長遠來看,它將爲你節省更多的時間。 –
@brunodesthuilliers我不認爲「純粹的編程錯誤」是準確的 - 以前沒有混入,因此不需要調用super(),也不需要知道如何實現mixin以利用它。就這樣,你可以不知不覺地在沒有警告的情況下刪除你的mixin的實現。 –