getting global variables from dictionary

I

icarus

global_vars.py has the global variables
set_var.py changes one of the values on the global variables (don't
close it or terminate)
get_var.py retrieves the recently value changed (triggered right after
set_var.py above)

Problem: get_var.py retrieves the old value, the built-in one but not
the recently changed value in set_var.py.

What am I doing wrong?

----global_vars.py---
#!/usr/bin/python

class Variables :
def __init__(self) :
self.var_dict = {"username": "original username"}


---set_var.py ---
#!/usr/bin/python

import time
import global_vars

global_vars.Variables().var_dict["username"] = "new username"
time.sleep(10) #give enough time to trigger get_var.py


---get_var.py ---
#!/usr/bin/python
import global_vars
print global_vars.Variables().var_dict.get("username")
 
A

Aaron \Castironpi\ Brady

global_vars.py has the global variables
set_var.py changes one of the values on the global variables (don't
close it or terminate)
get_var.py retrieves the recently value changed (triggered right after
set_var.py above)

Problem: get_var.py retrieves the old value, the built-in one but not
the recently changed value in set_var.py.

What am I doing wrong?

----global_vars.py---
#!/usr/bin/python

class Variables :
        def __init__(self) :
                self.var_dict = {"username": "original username"}

---set_var.py ---
#!/usr/bin/python

import time
import global_vars

global_vars.Variables().var_dict["username"] = "new username"
time.sleep(10)   #give enough time to trigger get_var.py

---get_var.py ---
#!/usr/bin/python
import global_vars
print global_vars.Variables().var_dict.get("username")

Are these separate processes?
 
C

Chris Rebert

When you do "Variables()" in your code, you're making a new instance
of that class that has no relation to any other instances. This is the
cause of your problem. To just reference a class, use just
"Variables". But that doesn't help in this case because var_dict is an
instance variable, not a class variable.

global_vars.py has the global variables
No it doesn't, it just defines a class. The class itself (but NOT its
instances) is a module-level global.
set_var.py changes one of the values on the global variables (don't
close it or terminate)
No, it just instanciates the Variables class and then manipulates the
instance, which is then GC-ed because it's no longer referenced
anywhere, even in set_var.
get_var.py retrieves the recently value changed (triggered right after
set_var.py above)
No, it creates an entirely new instance of Variables and then fetches
the value from that instance (which is still using the default value
because this new instance has never been modified).
Problem: get_var.py retrieves the old value, the built-in one but not
the recently changed value in set_var.py.

What am I doing wrong?

Try just making var_dict a module-level variable in global_vars.py and
then manipulating that rather than this unnecessary mucking about with
Variables(). Alternatively, make var_dict a *class* variable of
Variables by removing it from __init__ and just putting 'var_dict =
{"username": "original username"}' in the raw class body of Variables;
And then remove the parentheses after Variables as I mentioned in the
beginning.

Regards,
Chris
----global_vars.py---
#!/usr/bin/python

class Variables :
def __init__(self) :
self.var_dict = {"username": "original username"}


---set_var.py ---
#!/usr/bin/python

import time
import global_vars

global_vars.Variables().var_dict["username"] = "new username"
time.sleep(10) #give enough time to trigger get_var.py


---get_var.py ---
#!/usr/bin/python
import global_vars
print global_vars.Variables().var_dict.get("username")
 
G

George Sakkis

global_vars.py has the global variables
set_var.py changes one of the values on the global variables (don't
close it or terminate)
get_var.py retrieves the recently value changed (triggered right after
set_var.py above)

Problem: get_var.py retrieves the old value, the built-in one but not
the recently changed value in set_var.py.

What am I doing wrong?

----global_vars.py---
#!/usr/bin/python

class Variables :
        def __init__(self) :
                self.var_dict = {"username": "original username"}

---set_var.py ---
#!/usr/bin/python

import time
import global_vars

global_vars.Variables().var_dict["username"] = "new username"
time.sleep(10)   #give enough time to trigger get_var.py

---get_var.py ---
#!/usr/bin/python
import global_vars
print global_vars.Variables().var_dict.get("username")

First off, you don't import the set_var module anywhere; how do you
expect the value to change? Second, every time you do
"global_vars.Variables()" you create a brand new Variables() instance,
initialized with the original var_dict. The Variables() instance you
create at set_var.py is discarded in the very next line. Third, I have
no idea why you put the "time.sleep(10)" there.

By the way, Python is not Java; you don't have to make classes for
everything. A working version of your example would be:

----global_vars.py---

var_dict = {"username": "original username"}

---set_var.py ---
import global_vars
global_vars.var_dict["username"] = "new username"

---get_var.py ---
import global_vars
import set_var
print global_vars.var_dict.get("username")

$ python get_var.py
new username


HTH,
George
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,812
Latest member
GracielaWa

Latest Threads

Top