Python 2.7如何使用相同的方法处理两个基类

时间:2014-11-12 16:14:55

标签: python

首先,我来自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?

0 个答案:

没有答案