Представьте, что у меня есть класс GUI, основной функцией которого является обработка графического представления программы, но он также хранит информацию и связывает различные операции.Так, например, что-то вроде этого:
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QGridLayout, QApplication
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.button_a = QPushButton('button_a')
self.button_b = QPushButton('button_b')
self.button_c = QPushButton('button_c')
self.layout = QGridLayout()
self.layout.addWidget(self.button_a, 0, 0)
self.layout.addWidget(self.button_b, 1, 0)
self.layout.addWidget(self.button_c, 2, 0)
self.setLayout(self.layout)
self.variable_a = 1
self.variable_b = 2
self.variable_c = 3
self.object_a = None
self.object_b = None
self.object_c = None
self.button_a.clicked.connect(self.do_something)
self.button_b.clicked.connect(self.do_something_else)
self.button_c.clicked.connect(self.do_something_entirely_different)
def do_something(self):
self.object_a = ObjectClassA(self)
def do_something_else(self):
self.object_b = ObjectClassB(
self.variable_a, self.variable_b, self.variable_c
)
def do_something_entirely_different(self):
self.object_c = ObjectClassC()
class ObjectClassA:
def __init__(self, gui):
self.variable_a = gui.variable_a
self.variable_b = gui.variable_b
self.variable_c = gui.variable_c
class ObjectClassB:
def __init__(self, variable_a, variable_b, variable_c):
self.variable_a = variable_a
self.variable_b = variable_b
self.variable_c = variable_c
class ObjectClassC:
def __init__(self):
self.variable_a = GUI.variable_a
self.variable_b = GUI.variable_b
self.variable_c = GUI.variable_c
if __name__ == '__main__':
app = QApplication(sys.argv)
GUI = MainWindow()
GUI.show()
sys.exit(app.exec_())
Какой подход будет правильным здесь?Я вижу, что если вы передадите весь класс MainWindow, новый экземпляр ObjectClassA будет в основном иметь доступ ко всей информации, хранящейся в MainWindow.Но с другой стороны, если я передам только каждую переменную в отдельности, я могу в конечном итоге передать длинный список вещей, который кажется громоздким.Или лучше просто сослаться на экземпляр MainWindow?
Я уже нашел этот похожий вопрос , хотя я не совсем уверен, как ответ применим к моему вопросу.