首先,我来自Java背景,因此我对多重继承的了解有限。我继承了一些代码,其中两个类定义了相同的方法,但其中一个类将其定义为抽象。我现在想创建另一个使用两个类的功能的类,并且可以作为基类之一调用。在Java世界中,我们只有单继承,所以我会使用接口和对象组合的组合。
但是我想知道我是否应该在Python中使用多重继承?即使用两个现有的类作为基类。但是我遇到了问题。问题是类A期望实现定义一个方法,methodTwo(由methodOne调用)。这适用于仅从A继承的类,因为它们可以实现methodTwo。
然而,当一个类继承自A和BI时会遇到问题,因为如果它们实现了methodTwo,它们会影响B类中的相同方法,但如果它们没有实现它,我会收到运行时错误,告诉我A类的后代必须实现methodTwo。我天真地认为Python会使用一种后期绑定形式,因此会发现子类在运行时有methodTwo。
有没有人对如何最好地处理这个有任何建议?或者我应该遵循我在Java中使用的相同方法吗?
class A(object):
__metaclass__ = ABCMeta
def methodOne(self):
self.methodTwo()
@abstractmethod
def methodTwo(self):
pass
class B(object):
def methodTwo(self):
# do some important work
pass
class C(A):
def methodTwo(self):
pass # no problem here
class D(B, A):
# what to do?