[英]Access base class super in mixin
我有一個看起來像這樣的類結構:
class Question(object):
def answer(self):
return "Base Answer"
class ExclaimMixin(object):
def answer(self):
return "{}!".format(super(ExclaimMixin, self).answer())
class ExpressiveQuestion(Question, ExclaimMixin)
pass
我希望ExclaimMixin
的answer
方法能夠在ExpressiveQuestion
調用時訪問Question
answer
,以便它返回"Base Answer!"
。
顯然,在這種情況下,可以通過將ExclaimMixin
中的answer
方法放在ExpressiveQuestion
來解決,但是在某些情況下,這是不可能的(例如,在類結構中具有更大的深度和分支)。
是否可以使用mixins來實現此結果,還是只能通過修改基類樹來實現?
使用mixins時,您需要記住基本類順序的簡單規則-“從右至左”。 這意味着,所有mixin應該在實際的基類之前 。
class Question(object):
def answer(self):
return "Base Answer"
class ExclaimMixin(object):
def answer(self):
return "{}!".format(super(ExclaimMixin, self).answer())
class ExpressiveQuestion(ExclaimMixin, Question)
pass
>>> q = ExpressiveQuestion()
>>> q.answer()
'Base Answer!'
這種方法會更清晰嗎? 您在“問題”中定義問題內容,然后在ExclaimMixin中定義驚嘆號,ExclaimMixin接收一個問題內容,您要對其應用mixin(有意義的事情),然后在ExpresiveQuestion中將兩者混合。
class Question(object):
def answer(self):
return "Base Answer"
class ExclaimMixin(object):
def exclaim(self, answer):
return "{}!".format(answer)
class ExpressiveQuestion(Question, ExclaimMixin):
def expresive_question(self):
return self.exclaim(self.answer())
在[1]中:從答案導入*
在[2]中:eq = ExpressiveQuestion()
在[3]中:eq.expresive_question()在[3]中:“基本答案!”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.