У меня есть вопрос, где мои классы держать создание новых соединений БД, и я пытаюсь понять, что я делаю неправильно ... это моя структура:Почему переменная используется в некоторых классах, но не для других?
index.py
|_ a/const.py (not a Class, just several functions)
db = None
def get_connection():
global db
if not db:
db = created_new_connection()
print "New connection has been created"
else:
print "Connection already exists"
return db
|_ a/group.py (import const, Class)
|_ a/user.py (import const, Class)
«index.py» импорт «Const «а другой модуль, который позже использует„группу“и„пользователь“
Когда я бегу index.py, я получаю:
group.py "New connection has been created"
user.py "New connection has been created"
Таким образом, для теста, я попытался создать соединение в» индексе. py ", но теперь я получаю:
index.py "New connection has been created"
group.py run func1() "Connection already exists"
group.py run func2() "Connection already exists"
user.py "New connection has been created"
Теперь - я в замешательстве. как «группа», так и «пользователь» написаны почти точно так же. как это происходит, когда «группа» запускает «get_connection()», она работает так, как ожидалось (уже существует), а позже, когда «пользователь» запускает «get_connection()», он создает новое соединение ....
Что интересно (для меня) заключается в том, что когда я создал файлы (a, b, c, d) в тех же каталогах (чтобы сохранить структуру) и импортировал «c.py» во все файлы, тогда «a» создал соединение, но «b» и «b» d "не создали новое соединение, они использовали ту, которая все еще открыта .... (что я и ожидаю)
Любые идеи? спасибо заранее ...
'get_connection' не должен работать ни при каких условиях; 'db' является локальным для' get_connection', поэтому тест 'if not db' должен поднять' UnboundLocalError'. – user2357112
Извините, но я оставил это, я уже использую «глобальный db», поэтому в «group.py» он работает ... он также работает, если внутри group.py есть еще одна функция, вызывающая get_connection() - it скажет, что «уже существует» –
Возможно, у вас могут возникнуть проблемы с вашим пути импорта, в результате чего один и тот же файл будет импортироваться несколько раз, как очень похожие, но четкие модули. – user2357112