В моем, по общему признанию ограниченном, опыте программирования OO GUI (в основном с JAVA и Tkinter) я заметил, что в некотором коде все виджеты присваиваются атрибутам экземпляра, в то время как в другом коде мало, если таковые имеются.
Например, в Простой программе Hello World из главы Tkinter документации по python обе кнопки назначаются атрибутам экземпляра класса Application:
class Application(Frame):
...
def createWidgets(self):
self.QUIT = Button(self)
...
self.hi_there = Button(self)
...
def __init__(self, master=None):
Frame.__init__(self, master)
...
self.createWidgets()
Onс другой стороны, глава Dialog Windows книги Tkinter определяет класс поддержки диалогов, при этом ни один из его виджетов не назначен атрибутам экземпляра:
class Dialog(Toplevel):
def __init__(self, parent, title = None):
Toplevel.__init__(self, parent)
...
body = Frame(self)
...
self.buttonbox()
...
...
def buttonbox(self):
...
box = Frame(self)
w = Button(box, ...)
...
w = Button(box, ...)
...
...
Оператор вопроса
Каковы плюсы / минусы каждого подхода и существуют ли ситуации, в которых было бы более целесообразно использовать один подход вместо другого?