我已經(jīng)詢問了一些與我正在開發(fā)的游戲相關(guān)的問題。該問題是在開發(fā)過程中出現(xiàn)的,但實(shí)際上與游戲本身無關(guān)。我的代碼中有一個方法(子類中的“resize”),它調(diào)用其超類中的等效方法(超類的“resize”)。預(yù)期行為:超級調(diào)整大小調(diào)用 Super-do_rotozoom發(fā)生了什么:稱為 Sub-do_rotozoom 的超級調(diào)整大小這是一個代碼示例:子類:def do_rotozoom(self): # do rotozoom stuff of subclassdef resize(self,factor): super().resize(factor) self.do_rotozoom()超類:def do_rotozoom(self): #do rotozoom stuff of superclassdef resize(self,factor): self.factor = factor self.do_rotozoom()我找到了一個解決方法,其中涉及調(diào)用super().do_rotozoom()子類方法do_rotozoom(),然后由super().resize(). 我還發(fā)現(xiàn),在這種情況下我可以刪除該行self.do_rotozoom()。在這種情況下,這是一個非常簡單的修復(fù),但是在更復(fù)雜的情況下我會做什么,例如,如果我需要使用do_rotozoom()超類中的其他變量調(diào)用該方法,而不是在子類/另一個特定實(shí)現(xiàn)中調(diào)用該方法?換句話說,我如何能夠選擇在特定上下文中使用哪種方法?通常,您只能從子類訪問超方法,但不能從超類訪問超方法(不是超類的方法,而是它自己的方法)。我還沒有找到更好的標(biāo)題...:D
2 回答

楊魅力
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個贊
開發(fā)人員往往更喜歡組合而不是繼承,它更易于管理。
我建議您做的就是在子類中包含超類的實(shí)例,并在需要時(shí)使用它。

不負(fù)相思意
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個贊
子類的定義就是它繼承了超類的所有內(nèi)容,除了它重寫的方法和屬性之外。
子類可以使用 引用其超類及其方法實(shí)現(xiàn)super()
,就像您在示例中所做的那樣。
要么不要重寫do_rotozoom
,要么引用超類方法來super().do_rotozoom()
實(shí)現(xiàn)您需要的行為。
添加回答
舉報(bào)
0/150
提交
取消