2017-01-29 2 views
1

ich dieses Problem habe, wo ich versuche, eine Klassenvariable zu ändern, die in zwei separate Dateien importiert wurden.Ändern ein importiertes Klassenvariable

In settings.py.

class Settings: 
    Flag = True 

In slave.py.

from settings import Settings 

if(...): 
    Settings.Flag = False 
    print('Flag is False') 
else: 
    ... 

In main.py

from settings import Settings 

While True: 
    print('Status of Flag : ' str(Settings.Flag)) 

Auch wenn ich es ändern, so wird Flag auf False in Slave.py geändert. Es gibt immer noch True in main.py zurück.

Ich dachte, das sein könnte, weil ich die Einstellungen in beiden Slave.py & main.py. importieren Aber das herauszunehmen, gibt mir einen Fehler.

Antwort

2

sollten Sie importieren slave.py in main.py, um seinen Code auch laufen, wie ich in die Datei slave.py jeden Hinweis nicht sehen

Try this:

from settings import Settings 
import slave 

While True: 
    print('Status of Flag : ' str(Settings.Flag)) 
1

Das Problem hier ist, dass Sie versuchen, die Variablen in einem Prozess von einem anderen zu steuern. Ich beobachte, dass main.py keinen Hinweis auf die slave Modul machen, und daher ableiten, dass Sie slave.py separat ausgeführt werden (z Sie laufen main.py in einem Fenster und slave.py in einem anderen).

Betrachten Sie die folgenden Module:

settings.py:

class Settings: 
    Flag = True 

slave.py:

from settings import Settings 

def change_value(v): 
    Settings.Flag = v 

main.py:

from settings import Settings 
from slave import change_value 

print('Status of Flag :', str(Settings.Flag)) 
change_value(False) 
print('Status of Flag :', str(Settings.Flag)) 
change_value(True) 
print('Status of Flag :', str(Settings.Flag)) 

Nun, wenn Sie laufen main.py sollten Sie die Ausgabe

('Status of Flag :', 'True') 
('Status of Flag :', 'False') 
('Status of Flag :', 'True') 

Dies funktioniert, weil jetzt alle Module ein Teil des gleichen Prozesses sind, und beide so main.py und slave.py die gleiche Instanz des slave Modul importieren, und daher beide beziehen sich auf die gleiche Settings Instanz.

Wenn Sie wirklich das Verhalten eines Prozesses von einem anderen beeinflussen müssen, dann müssen Sie einen bestimmten Mechanismus für inter-process communication, ein Thema eher zu breit für den Umfang dieser Antwort verwenden.

+0

Vielen Dank dafür. Allerdings wird der Flag-Status jetzt in main.py korrekt angezeigt. Aber wenn es in Slave.py geändert wird. Das main.py-Flag gibt nur den Status wieder, der in main.py festgelegt ist. Ich brauche den Status in meinem Programm gleich zu sein. – Keva161

+0

Ich bin mir nicht sicher, ob du deine ganze Bedeutung mitgeteilt hast. Es könnte nützlich sein, das 'Settings'-Objekt und die' change_value'-Funktion in dasselbe Modul zu stellen.Dann würden Sie beobachten, dass der Wert des Flags von jedem Modul geändert werden kann, das das 'settings' Modul importiert hat. Es ist nur ein kurzer Schritt von dort, um 'change_value' eine Methode der' Settings' Klasse zu machen. – holdenweb