Похоже, вы путаете родство между классом (наследование) и иерархией между объектами QObject. В вашем случае экземпляр "foo", то есть "self", является родителем экземпляра "my_bar", но "foo" не является родителем класса "bar".
Наследование между классами равно из основных характеристик в OOP, что позволяет повторно использовать код, поскольку он определяет общие характеристики между классами. С другой стороны, иерархия между QObject имеет в качестве основной задачи управление памятью, то есть отсутствие утечек памяти.
С учетом вышеизложенного, super().parent().baz()
не имеет смысла, так как в этом случае super().parent()
то же самое, что и self.parent()
, так как метод получения не переопределен, но вы должны использовать self.parent().baz()
.
Теперь проблема проектирования атакована: если вы используете "self.parent (). baz () «тогда вы заставляете, чтобы любой экземпляр« bar »всегда имел« foo »в качестве родителя, и что произойдет, если для некоторой реализации экземпляр« bar »не обязательно будет дочерним для экземпляра« foo » ? Ну, у вас будут проблемы, так как с вашим дизайном вы не дадите свободу. В заключение, это будет зависеть от того, будет ли ваша цель заставить любой экземпляр «bar» быть потомком экземпляра «foo».
Чтобы избежать этих проблем, Qt реализует сигналы, так как они дают нам много свободы, так как он уведомлен (или вызван), какой метод класса X.
Я рекомендую вам прочитать Сигналы и слоты , чтобы вы понимали преимущества сигналов по сравнению с другими такие элементы, как обратные вызовы, et c.