Python继承的类行为

Python继承的类行为,python,inheritance,Python,Inheritance,在下面的代码中,我有一个关于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): pri

在下面的代码中,我有一个关于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++中也尝试过相同的逻辑,所以它将打印< /P>
Call from B

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

< P>作为ChpEnter的答案的补充,这个C++代码显示了与Python中的行为完全相同的行为:

#include <iostream>

class B {
public:
    void test() {
        call();
    }
    virtual void call() {
        std::cout << "Called from B" << std::endl;
    }
};

class C: public B {
public:
    void call() {
        std::cout << "Called from C" << std::endl;
    }
};

int main() {
   C c;
   c.test();        // will print Called from C
   return 0;
}
#包括
B类{
公众:
无效测试(){
call();
}
虚拟无效调用(){

STD:C++是关于Python是否有多态性的问题?如果是这样,谢谢你的回复。我只是想知道为什么C++和Python之间有区别。因为它们是两种不同的语言,而且根本不需要完全相同的功能。谢谢;我花了20分钟试图编写大致相同的东西;)(只是我错误地认为调用虚拟方法行为需要指针,而使用了
C*C=new C();
)谢谢,我知道为什么我没有得到相同的结果在C++中,我忘记使用关键字虚拟。