2016-07-08 13 views
-3

library.py

str = '' 
def setStr(input): 
    global str 
    str = input 
def getStr(): 
    return str 

Jetzt kann ich in Module importieren und aktualisieren ...Kann ich das ohne globale Variablen machen?

module1.py

import library 
import module2 

library.setStr('wow') 
module2.run() 

module2.py

import library 

def run(): 
     print(library.getStr()) 

Ausgang

wow 

Gibt es eine Möglichkeit, die Funktionalität ohne globale Aufrufe zu erstellen?

Danke!

+1

Was wird Ihre Bibliothek zu tun, dass die Python Logging-Bibliothek nicht tun, außer schlampig aussehen? Es sind wahrscheinlich bereits Tausende von Arbeitsstunden in die Python-Logging-Bibliothek investiert worden. Warum denkst du, dass du oder irgendjemand in der Lage ist, es "besser zu replizieren"? Da Ihre einzige Idee darin besteht, viele globale Variablen (statt Klassen und Objekte) zu verwenden, erscheint der Ausblick eher düster. –

+0

Ich meinte ich muss meine Lösung besser machen..ich kann die Logging-Bibliothek leider nicht für meine Bedürfnisse nutzen. Ich erkenne meine Mehrdeutigkeit im Titel. ändert sich jetzt. – user3732466

Antwort

0

Also, wie repliziere ich die Art der Protokollierung funktioniert, aber ohne globale Variablen für meine Zwecke?

Sie können nicht, weil logging uses global (module-level) variables to store its configuration. Zum Beispiel wird die root logger in einer globalen Variablen gehalten.

(ich meine, können Sie diese Variablen auf Klassenebene statt der Modulebene leben müssen, wie mit Logger.manager getan wird, aber es ist der gleiche Code riechen oder so.)

+0

Wie? Ich habe den Methodencode durchgesehen. Es verwendet niemals eine globale Variable. – user3732466

+0

['root'] (https://hg.python.org/cpython/file/tip/Lib/logging/__init__.py#l1669) ist eine globale Variable. 'Logger.manager' ist eine Klassenvariable, im Wesentlichen eine verkappte globale Variable. – Kevin