Для переменной, которая используется повсеместно и в течение срока службы приложения, я вижу два пути, которые будут выполнять sh задачу. А) Создайте глобальную переменную (я знаю, что глобальные переменные плохие . Но для этого конкретного сценария, когда все, что вам нужно - это отдел, и он нужен вам везде, глобальная переменная лучше, чем переписывать все ваши классы, чтобы принять значение конструктора) B) Создайте класс «Context», в котором в качестве переменной будет выбран отдел. Элемент контекста передается всем вашим функциям при вызове, и вы можете добавить дополнительную информацию в класс контекста, если это необходимо.
Для масштабируемых приложений вы должны хранить эту информацию в файле конфигурации или в специальной таблице в базе данных. Тогда у вас будет контекст и промежуточное ПО.
Контекст - это словарь, который передается всем вашим бизнес-функциям.
Промежуточное программное обеспечение - это список классов, которые каким-либо образом изменяют контекст.
У вас будет класс промежуточного программного обеспечения под названием "UserChoices", который имеет функцию:
def alterContext(context={}):
context["DepartmentChoice"] = readDBvalue()
return context
Тогда вы получите следующий контекст:
def getContext():
context ={}
for m in middlewares:
context = m(context)
return context
И тогда вы сможете использовать свои бизнес-функции следующим образом:
def businessFunc(context):
return stuff
businessFunc(getContext())