AJ Mayorga wrote:
For something like this I generally create a superclass to hold
configuration variables that will change overtime, doing that will save you
from insanity.

Class configVar:

        #set initial values
        Def __init__(self):
                Self.A = 5
                Self.B = 10
                Self.C = 20


Class myMath(configVars):
        def __init__(self):
                pass

        def SubAandB(self):
                return self.A - self.B

        def AddCandB(self):
                return self.C + self.B

        def MultiplyXbyA(self, x):
                return self.A * x


m = myMath()
X = m.SubAandB()
Y = m.AddCandB()
Z = m.MultiplyXbyA(32)

Keeps your vars in a safer easier to handle, debug, and change kinda way
Good luck

AJ

-----Original Message-----
From: python-list-bounces+aj=xernova....@python.org
[mailto:python-list-bounces+aj=xernova....@python.org] On Behalf Of David
Stanek
Sent: Monday, April 13, 2009 12:12 PM
To: Ravi
Cc: python-list@python.org
Subject: Re: Imports in python are static, any solution?

On Mon, Apr 13, 2009 at 11:59 AM, Ravi <ra.ravi....@gmail.com> wrote:
foo.py :

   i = 10

  def fi():
     global i
     i = 99

bar.py :

   import foo
   from foo import i

   print i, foo.i
   foo.fi()
   print i, foo.i

This is problematic. Well I want i to change with foo.fi() .

Why not only import foo and using foo.i? In fi() when you set i = 99
you are creating a new object called i in foo's namespace.


===============================

Aj is right. In foo.py there are two definitions for 'i'. The initial and the replacement initiated by fi(). While initially there is no 'i' definition in bar itself.

To test, use my changes to bar.py

import foo
#from foo import i

i= foo.i
print i, foo.i
x= foo.fi()
print i, x, foo.i
x= foo.i
print  i, x, foo.i

the output will be:
10 10
10 None 99
10 99 99

output is same if you uncomment #from... and comment i=...
The '...import i' creates the "same" var as the i=... in the current run
If you comment out both the from and the i= then the print i will fail because i has not been defined in current space.
foo.fi() returns None (nothing) per it's definition.
whereas the first foo.i returns the initial i value and the foo.i after foo.fi() returns the 2nd value, foo's i reset to 99 by fi() inside foo.

Clear as Mud???


Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to