我有一个看起来像这样的类结构:
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
我想要 answer
ExclaimMixin
中的方法能够访问answer
在 Question
当调用 ExpressiveQuestion
, 这样它就会返回 "Base Answer!"
.
很明显,在这种情况下,可以通过将 answer
ExclaimMixin
中的方法在 ExpressiveQuestion
相反,但在某些情况下这是不可能的(例如,在类结构中更深入和分支)。
是否有可能使用 mixin 来实现这个结果,还是只能通过破坏基类树来实现?
最佳答案
使用 mixin 时,您需要记住基类顺序的简单规则 - “从右到左”。这意味着,所有 mixins 都应该在 实际基类之前。
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!'
关于python - 在 mixin 中访问基类 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256034/