Я хотел бы реализовать какой-то одноэлементный шаблон в моей программе Python. Я думал об этом без использования классов; то есть я хотел бы поместить все связанные с singleton функции и переменные в модуль и считать его реальным синглетоном.
Например, скажем, что это должно быть в файле 'singleton_module.py':
# singleton_module.py
# Singleton-related variables
foo = 'blah'
bar = 'stuff'
# Functions that process the above variables
def work(some_parameter):
global foo, bar
if some_parameter:
bar = ...
else:
foo = ...
Тогда остальная часть программы (т.е. другие модули) будет использовать этот синглтон так:
# another_module.py
import singleton_module
# process the singleton variables,
# which changes them across the entire program
singleton_module.work(...)
# freely access the singleton variables
# (at least for reading)
print singleton_module.foo
Мне показалось, что это очень хорошая идея, потому что она выглядит довольно чистой в модулях, использующих singleton.
Однако все эти утомительные "глобальные" утверждения в модуле singleton уродливы. Они встречаются в каждой функции, которая обрабатывает одноэлементные переменные. Это не так много в этом конкретном примере, но когда у вас есть 10+ переменных для управления несколькими функциями, это не очень.
Кроме того, это довольно подвержено ошибкам, если вы забудете глобальные операторы: будут созданы переменные, локальные для этой функции, и переменные модуля не будут изменены, что вам не нужно!
Итак, будет ли это считаться чистым? Есть ли подход, похожий на мой, который справляется с "глобальным" беспорядком?
Или это просто не путь?