python - 在 mixin 中访问基类 super

标签 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

我想要 answer ExclaimMixin 中的方法能够访问answerQuestion当调用 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/

相关文章:

python - 简单的动态网页抓取 - 没有 BeautifulSoup

Python 2.7 - Outlook Win32com.client 无法从 .msg 获取发件人的实际电子邮件地址

c++ - 从模板类多重继承

java - 返回泛型扩展两种类型的工厂方法

C++ 使用多重继承与未知基类比较指针

python - Django 信号,实现保存监听器

python - 访问我的本地 flask Web 应用程序时,蝗虫请求返回错误 502

PYTHON:将嵌套列表中相同值的子列表创建到一个列表中

c++ - 多重或虚拟继承下的类的内存布局和vtable(s)?

c++ - 防止 C++ 中的多重继承