首页 > 解决方案 > Python 继承的类行为

问题描述

我有一个关于 python 继承类方法的问题,在下面的代码中。

class B(object):
    def test(self):
        self.call()
    def call(self):
        print("Call from B")

if __name__ == "__main__":
    b = B()
    b.test()


from b import B

class C(B):
    def call(self):
        print("Call from C")

if __name__ == "__main__":
    c = C()
    c.test()

当我运行这段代码时,结果是

Call from C

父类方法会调用子类方法。我想知道这是否是预期和稳定的行为?因为我也在 C++ 中尝试了相同的逻辑,所以它会打印

Call from B

标签: pythoninheritance

解决方案


是的,这是意料之中的。c是 的实例C,但由于C.test未定义,因此c.test解析为B.test。但是,相应的调用self.call()调用,C.call因为运行时类型selfis C、 notBC.call 定义。将所有 Python 方法视为虚拟方法。


推荐阅读