在派生 class 中执行基础 class 覆盖的方法

Executing base class overridden method in derived class

我有一个 PyQt5 应用程序,该应用程序有一个 QToolBox,它由 2 个页面的不同用户界面组成。

所以对于 MainWindow 本身,我创建了一个名为 BPAPOIApp class 的基础 class 来执行可能直接针对 MainWindow 的任何操作。

并且我创建了另一个派生的 class,它继承了每个 QToolBox 页面的 BPAPOIApp class,因为每个页面都有单独的操作要完成。

在基地里面class我有一个方法叫做def init_signals来启动所有与基地相关的动作信号class,同时我想有另一个def init_signals 在两个派生的 classes 中(对于 QToolBox 中的 2 页),这意味着该方法将被覆盖。是否有正确的方法来启动所有 classes(基础和派生)的 init_signals 方法,因为它们都在等待不同的事件发生。

下面是一些相关的代码。

class BPAPOIApp(QWidget):

def __init__(self):
    super(BPAPOIApp, self).__init__()
    self._widget = QWidget()
    self._ui = Ui_Form()
    self._widget.setWindowFlag(Qt.FramelessWindowHint)
    self._ui.setupUi(self._widget)
    self._ui.label.hide()

    self.init_signals()
    
def init_signals(self):
    self._ui.close_tbtn.clicked.connect(lambda: self._widget.hide())
    self._ui.information.clicked.connect(self.information_display)
    self._ui.toolBox.currentChanged.connect(self.reset_info)

def information_display(self):
    self._ui.label.setText('Test text')
    self._ui.label.show()

以下是BPAAppclass.

class BPAApp(BPAPOIApp):

def __init__(self):
    super(BPAApp, self).__init__()

    self.init_signals()

def init_signals(self):
    super().init_signals()        # try to instantiate base class signals here
    self._ui.radio_btn1.toggled.connect(self.option_selected)
    self._ui.radio_btn2.toggled.connect(self.option_selected)

if __name__ == '__main__':
    bpa = BPAApp()

当我触发 information 按钮时 (self._ui.information) 标签没有出现在界面中,这可能是哪里出了问题?

无需在派生 class BPAApp.__init__() 中调用 self.init_signals(),因为它已在父 class BPAPOIApp.__init__() 中调用。当父级 class 调用它时,MRO 会将其指向最派生的实现,即派生的 BPAApp.init_signals()(进而调用父级 BPAPOIApp.init_signals())。