Предположим, у меня есть модуль, в котором я определил некоторые служебные функции/классы, которые ссылаются на сущности, определенные в пространстве имен, в которое будет импортирован этот вспомогательный модуль (пусть "a" будет такой сущностью):
Модуль1:
Код: Выделить всё
def f():
print a
Код: Выделить всё
import module1
a=3
module1.f()
Код: Выделить всё
Traceback (most recent call last):
File "Z:\Python\main.py", line 10, in
module1.f()
File "Z:\Python\module1.py", line 3, in f
print a
NameError: global name 'a' is not defined
Я пытаюсь создать программу на Python, которая подключается к серверу базы данных MySQL и отображает/изменяет данные с помощью графического интерфейса. Для чистоты я определил набор вспомогательных/служебных функций, связанных с MySQL, в отдельном файле. Однако у всех них есть общая переменная, которую я изначально определил внутри модуля утилит и которая представляет собой объект cursor из модуля MySQLdb.
Позже я понял, что объект курсор (который используется для связи с сервером базы данных) должен быть определен в основном модуле, чтобы как основной модуль, так и все, что импортировано в него, могли получить доступ к этому объекту.
Конечный результат будет примерно таким:
utilities_module.py:
Код: Выделить всё
def utility_1(args):
code which references a variable named "cur"
def utility_n(args):
etcetera
program.py:
Код: Выделить всё
import MySQLdb, Tkinter
db = MySQLdb.connect('blahblah...')
cur = db.cursor() # cur is defined!
from utilities_module import *
В частности, предлагалось добавить в файл утилит оператор from program import cur, например:
utilities_module.py:
Код: Выделить всё
from program import cur
#rest of function definitions
Как, черт возьми, я могу сделать объект cur, определенный в основном модуле, видимым для тех вспомогательных функций, которые в него импортированы?
Подробнее здесь: https://stackoverflow.com/questions/159 ... ed-modules