在 mixin 中访问基类 super

Tim*_*imD 1 python multiple-inheritance

我有一个看起来像这样的类结构:

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
Run Code Online (Sandbox Code Playgroud)

我希望answerin 方法ExclaimMixin能够answerQuestion调用 in 时访问in ExpressiveQuestion,以便它返回"Base Answer!"

显然,在这种情况下,这可以通过将answer方法放入inExclaimMixinExpressiveQuestion来解决,但在某些情况下这是不可能的(例如,在类结构中更深入和分支)。

是否可以使用mixin来实现这个结果,或者只能通过修改基类树来实现?

oll*_*amh 5

使用 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!'
Run Code Online (Sandbox Code Playgroud)