Sichtbarkeit globaler Variablen in importierten Modulen

Ich bin auf eine Art Wand gestoßen, die Module in einem Python-Skript importiert. Ich werde mein Bestes tun, um den Fehler zu beschreiben, warum ich darauf stoße und warum ich diesen bestimmten Ansatz binde, um mein Problem zu lösen (den ich gleich beschreiben werde):

Angenommen, ich habe ein Modul, in dem ich einige Dienstprogrammfunktionen / -klassen definiert habe, die sich auf Entitäten beziehen, die im Namespace definiert sind, in den dieses Hilfsmodul importiert wird ("a" sei eine solche Entität):

Modul 1:

def f():
    print a

Und dann habe ich das Hauptprogramm, in dem "a" definiert ist, in das ich diese Dienstprogramme importieren möchte:

import module1
a=3
module1.f()

Das Ausführen des Programms löst den folgenden Fehler aus:

Traceback (most recent call last):
  File "Z:\Python\main.py", line 10, in <module>
    module1.f()
  File "Z:\Python\module1.py", line 3, in f
    print a
NameError: global name 'a' is not defined

Ähnliche Fragen wurden gestellt In der Vergangenheit (vor zwei Tagen, nicht wahr) wurden verschiedene Lösungen vorgeschlagen, die jedoch meiner Meinung nach nicht wirklich meinen Anforderungen entsprechen.Hier ist mein besonderer Kontext:

Ich versuche ein Python-Programm zu erstellen, das eine Verbindung zu einem MySQL-Datenbankserver herstellt und Daten mit einer GUI anzeigt / ändert. Aus Gründen der Übersichtlichkeit habe ich die Reihe der Hilfs- / Hilfsprogrammfunktionen für MySQL in einer separaten Datei definiert. Sie haben jedoch alle eine gemeinsame Variable, die ich ursprünglich definiert hatteInnerhalb das Versorgungsmodul, und das ist dieMauszeiger Objekt aus dem MySQLdb-Modul. Ich habe später gemerkt, dass dieMauszeiger Das Objekt (das zur Kommunikation mit dem Datenbankserver verwendet wird) sollte im Hauptmodul definiert werden.Damit können sowohl das Hauptmodul als auch alle darin importierten Objekte auf dieses Objekt zugreifen.

Das Endergebnis würde ungefähr so ​​aussehen:

utilities_module.py:

def utility_1(args):
    code which references a variable named "cur"
def utility_n(args):
    etcetera

Und mein Hauptmodul:

program.py:

import MySQLdb, Tkinter
db=MySQLdb.connect(#blahblah) ; cur=db.cursor()  #cur is defined!
from utilities_module import *

Sobald ich versuche, eine der Dienstprogrammfunktionen aufzurufen, wird der oben genannte Fehler "globaler Name nicht definiert" ausgelöst.

Ein besonderer Vorschlag war, eine "from program import cur" -Anweisung in der Dienstprogrammdatei zu haben, wie diese:

utilities_module.py:

from program import cur
#rest of function definitions

program.py:

import Tkinter, MySQLdb
db=MySQLdb.connect(#blahblah) ; cur=db.cursor()  #cur is defined!
from utilities_module import *

Aber das ist zyklischer Import oder so und unter dem Strich stürzt es auch ab. Meine Frage lautet also:

Wie zum Teufel kann ich das im Hauptmodul definierte "cur" -Objekt für die Hilfsfunktionen sichtbar machen, die in es importiert werden?

Vielen Dank für Ihre Zeit und meine tiefste Entschuldigung, wenn die Lösung an anderer Stelle veröffentlicht wurde. Ich finde die Antwort einfach nicht selbst und habe keine Tricks mehr in meinem Buch.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage