Python 多重继承:选择要调用的基类方法
Posted
技术标签:
【中文标题】Python 多重继承:选择要调用的基类方法【英文标题】:Python multiple inheritance: picking which base class' method to call 【发布时间】:2014-07-15 00:32:08 【问题描述】:我定义了一个类C
,它继承自A
。现在有一个新类 B
,它提供与 A
相同的方法,但行为略有不同。
如何设计C
类,使其易于使用A
或B
作为基类?理想情况下,我现在希望通过尽可能少的工作来进行此更改,即使使用起来有点难看。
有关该问题的其他上下文,A
和 B
是 psycopg2
游标。 A
是标准光标,B
是字典光标。 C
是光标周围的包装器,提供 Redshift 特定的功能。
【问题讨论】:
为什么不将A或B类型的对象作为参数传递给C的构造函数,C可以调用该对象的方法? 我还希望能够直接在C
类型的对象上调用 A
的方法,例如我希望能够调用c.execute()
,其中execute
在A
和B
上定义。如果我不能实现这一切,我可能不得不走你的路,但它不是最理想的,因为它会使使用类的代码不那么干净。
你可以在 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 多重继承:选择要调用的基类方法的主要内容,如果未能解决你的问题,请参考以下文章