Python继承的类行为
在下面的代码中,我有一个关于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
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++中,我忘记使用关键字虚拟。