0

我已经定义了从A继承的类C。现在有一个新类B,它提供了与A相同的方法,但具有稍微不同的行为。Python多重继承:选择要调用的基类的方法

如何设计类C,使其易于使用AB作为基类?理想情况下,我希望现在尽可能少地做这种改变,即使使用起来有点难看。

对于问题的其他上下文,ABpsycopg2游标。 A是一个标准光标,而B是一个dictcursor。 C是提供Redshift特定功能的光标的包装。

+0

为什么不传递A或B类型的对象作为C的构造函数的参数,其中C可以调用此对象上的方法? –

+0

我也希望能够直接在'C'类型的对象上调用'A'的方法,例如,我希望能够调用'c.execute()',其中'A'和'B'上定义了'execute'。如果我无法做到这一切,我可能不得不按照自己的方式行事,但这不是最理想的,因为它会让使用类的代码变得不那么干净。 – marcog

+1

你可以在类C上实现['__getattr__'](https://docs.python.org/2/reference/datamodel.html#object.__getattr__),以便它回落到内部对象上。 –

回答

0

您使用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的方法不曾经有知道他们的基本实现。