Это вопрос Python и C++.Множественное наследование в python vs C++
Я экспериментирую с множественной наследственностью, и я столкнулся с этим примером.
B1 B2
\/
D
Скажем, у меня есть два независимых (?) Родительские классы класса B1, B2
и один ребенок D
. Объекты размером class D
.
class B1:
def f1(self):
print "In f1"
class B2:
def f2(self):
self.f1()
class D (B1, B2):
def fD(self):
self.f2()
d = D()
d.fD()
Output: In f1
Что интересно (по крайней мере для меня), что class B2
не имеет знаний о class B1
и еще f2
можно назвать self.f1()
без проблем.
Я попытался воспроизвести эту точную вещь на C++, и я не смог заставить ее работать, потому что я не знаю, как позвонить f1
из f2
.
class B1 {
public:
virtual ~B1() {}
virtual void f1() { cout << "In f1" << endl; }
};
class B2 {
public:
virtual ~B2() {}
virtual void f2() { /* What goes here?? */ }
};
class D : public B1, public B2 {
public:
void fD() { f2(); }
};
Итак, я хочу знать, как/почему Python может справиться с этим, но C++ не может?
Кроме того, какие минимальные изменения мы можем внести в код на C++, чтобы заставить его вести себя как код Python?
Это не очень интересно в Python. Он просто пытается (динамически) разрешить данное свойство с помощью дерева MRO (Order Resolution Order) (это немного сложнее, чем просто искать свойство благодаря всем различным правилам, но это о том, как его можно суммировать). Дерево MR (Разрешение метода) * всегда * начинается с приемника, который является экземпляром текущего объекта, когда используется self - это также то, как Python позволяет переопределять и полиморфизм, а не определяющий тип метода. Чтобы вызвать метод для определенного типа, см. 'TheType.method (self, ..)' – user2246674
@ user2246674: Это правда, когда классы не являются «новым стилем» (т. Е. Производным от 'object')? Если это важно, ответ должен быть отредактирован. –