Я работаю над библиотекой виджетов на основе текстового интерфейса и решил, что настало время предоставить пользователю моей библиотеки возможность инкапсулировать конфигурацию всего приложения через объект приложения, например:
class App:
def __init__(self, screen_size_tuple):
self.screen_size = screen_size_tuple
def get_screen_size(self):
return self.screen_size
class Widget:
def __init__(self, rows, cols, y, x, foo, bar, app):
self.rows = rows
self.original_dimensions = (rows, cols)
self.original_coords = (y, x)
#etc, etc
self.app = app
self.fullscreen = False
def self.toggle_fullscreen(self):
if self.fullscreen != True:
self.y = 0
self.x = 0
self.rows = self.app.screen_size[0] # y value from the application object
self.cols = self.app.screen_size[1] # x value from the application object
else:
self.y = self.original_coords[0]
self.x = self.original_coords[1]
self.rows = self.original_dimensions[0]
self.cols = self.original-dimensions[1]
Мой вопрос двоякий: во-первых, когда я использую эту тактику, как мне избежать передачи экземпляра класса App каждому виджету при создании? Рекомендуется ли делегировать создание виджета самому объекту приложения? Во-вторых, есть ли название для этого шаблона проектирования при правильном использовании? Это немного похоже на внедрение наблюдателя или зависимости, но я не уверен, что эти шаблоны применимы здесь.
Заранее спасибо =)