调用从两个类继承的对象方法

时间:2017-10-26 14:05:17

标签: python inheritance methods extends

我有三个课程ABC

A有一个方法hello(self)B继承自A并实施新方法hello(self)C继承自B并重新实施方法hello(self)

现在,如果我创建了一个实例b = B()并致电b.hello(),则会调用它B.hello(b)

问题在于,当我创建对象c = C()并致电c.hello()时,它实际上会调用B.hello(c)而不是C.hello(c)。那是为什么?

我的代码如下所示:

class A:
    def hello(self):
        self.helloHandler()
    def helloHandler(self):
        print('class A method')

class B(A):
    def helloHandler(self):
        print('class B method')

class C(B):
    def helloHandler(self):
        print('class C method')

c = C()
c.hello()

这有效但不是我的。我的代码在这一点上有几千行...不能真正发布它但这就是重点。我不知道可能是什么问题。我使用abcmeta,如果由于一些不明确的理由迫使子类实现一些方法。

编辑:我弄乱了两个看起来相同的物体。一切都按预期工作!

2 个答案:

答案 0 :(得分:2)

我无法重现你的问题。以下是您定义的设置,B继承自A但重载其方法; C继承自B但又重载其方法。

创建C的实例并调用hello()使用C中正确的重载方法。

class A:
    def hello(self):
        print('class A method')

class B(A):
    def hello(self):
        print('class B method')

class C(B):
    def hello(self):
        print('class C method')

c = C()
c.hello()
# prints
class C method

答案 1 :(得分:0)

我在所有班级之间感到困惑。我有两个看起来非常相似的对象......一切正常。