#python
#python
Вопрос:
Я пытаюсь создать глобальную переменную между двумя файлами, это фрагмент соответствующего кода:
Logger.py
import globals
class Logger():
...
def log(self):
globals.sql.execute('..')
globals.py
import Logger
import SQL
logger=Logger.Logger()
sql=SQL.SQL()
При запуске я получаю сообщение об ошибке
Ошибка атрибута: объект ‘module’ не имеет атрибута ‘sql’
на globals.sql.execute('..')
Ответ №1:
У вас есть циклический импорт, Logger
imports globals
который импортирует Logger
. Далее Logger.Logger()
строка выполняется перед sql=SQL.SQL()
строкой, поэтому последняя еще не существует.
В остальном ваш код неполон, но если вы попытаетесь зарегистрировать что-либо из Logger.__init__()
метода, это означает, что globals
модуль еще не завершен, и вы получите ошибку атрибута.
Возможно, вы могли бы исправить это, переместив sql = SQL.SQL()
строку в run перед созданием Logger()
экземпляра. Однако рассмотрите возможность полного отказа от циклического импорта.
Вы могли бы передать sql
объект в регистратор, чтобы избежать необходимости создавать циклический импорт, например.
Комментарии:
1. Можете ли вы предложить способ избежать циклического импорта в этом примере?
2. @Kikapi: добавлено; не используйте
sql
в качестве глобальной, передайте ее в качестве аргумента регистратору.