Python 多重继承:选择要调用的基类方法

Posted

技术标签:

【中文标题】Python 多重继承:选择要调用的基类方法【英文标题】:Python multiple inheritance: picking which base class' method to call 【发布时间】:2014-07-15 00:32:08 【问题描述】:

我定义了一个类C,它继承自A。现在有一个新类 B,它提供与 A 相同的方法,但行为略有不同。

如何设计C 类,使其易于使用AB 作为基类?理想情况下,我现在希望通过尽可能少的工作来进行此更改,即使使用起来有点难看。

有关该问题的其他上下文,ABpsycopg2 游标。 A 是标准光标,B 是字典光标。 C 是光标周围的包装器,提供 Redshift 特定的功能。

【问题讨论】:

为什么不将A或B类型的对象作为参数传递给C的构造函数,C可以调用该对象的方法? 我还希望能够直接在 C 类型的对象上调用 A 的方法,例如我希望能够调用c.execute(),其中executeAB 上定义。如果我不能实现这一切,我可能不得不走你的路,但它不是最理想的,因为它会使使用类的代码不那么干净。 你可以在 C 类上实现__getattr__,这样它就会退回到内部对象上。 哦!那可以很好地工作。让我看看,然后回复你。 【参考方案1】:

您可以像这样使用super 函数:

class A(object):
    def foo(self, arg):
        print arg, 'in parent class'

class C(A):
    def foo(self, arg):
        super(C, self).foo(arg)
        print arg, 'in subclass'

>>> C().foo('bar')
bar in parent class
bar in subclass

如果这样做,C 的方法就不必知道它们的基本实现。

【讨论】:

以上是关于Python 多重继承:选择要调用的基类方法的主要内容,如果未能解决你的问题,请参考以下文章

大型程序的工具——多重继承与虚继承

多重继承,虚基类

多重继承方法或属性调用顺序(MRO)

作用域分辨操作符,虚基类,赋值兼容规则。哪些可以解决多重继承二义

Python类的多重继承问题深入分析

C++/MFC多重继承调用基类构造函数