Imports in python are static, any solution?

norseman norseman at hughes.net
Mon Apr 13 22:23:48 CEST 2009


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.com at python.org
> [mailto:python-list-bounces+aj=xernova.com at python.org] On Behalf Of David
> Stanek
> Sent: Monday, April 13, 2009 12:12 PM
> To: Ravi
> Cc: python-list at python.org
> Subject: Re: Imports in python are static, any solution?
> 
> On Mon, Apr 13, 2009 at 11:59 AM, Ravi <ra.ravi.rav at 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



More information about the Python-list mailing list