我有:

class A:

    def __init__(self):
        pass

    def func_X(self):
        print("Class A: X")

        self.func_Y()

    def func_Y(self):
        print("Class A: Y")
        print("Why does not work?")


class B(A):

    def __init__(self):
        A.__init__(self)

    def func_Y(self):
        print("Class B: Y")


if __name__ == "__main__":

    TEST = B()
    TEST.func_X()

OUTPUT:

Class A: X
Class B: Y


问题:为什么使用“ B.func_Y”而不使用“ A.func_Y”?这是虫子吗?如何解决?我需要它与C ++一样工作。 C ++模拟:

#include <iostream>

using namespace std;

class A
{
public:
      void func_X() {cout<<"Class A: X"<<endl; func_Y();}
      void func_Y() {cout<<"Class A: Y"<<endl;}
};

class B: public A
{
public:
      void func_Y() {cout<<"Class B: Y"<<endl;}
};


int main(void)
{
    B TEST = B();
    TEST.func_X();

    return 0;
}

OUTPUT:

Class A: X
Class A: Y


我很长一段时间都面对这个问题,但是没有找到解决方案。任何想法如何解决这个问题?

最佳答案

发生这种情况是因为您在func_Y()上调用self。这在C ++中可能等效于在func_Y()上调用this

看这个related question

似乎您应该执行A.func_Y()或调用super而不是self.func_Y()

让我知道这是否对您有帮助。

关于c++ - Python 3继承与C++中的相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16332176/

10-11 18:31