Scope - import and globals

Tijs tijs_news at artsoftonline.com
Wed May 30 09:25:29 EDT 2007


HMS Surprise wrote:

> 
> In the file snippet below the value for the global hostName is
> determined at runtime. Functions imported from the parent  baseClass
> file such as logon also need access to this variable but cannot see it
> the with the implementation I have attempted here.

Use a class variable:

class baseClass:
    hostName = None   # undefined yet
    
    def someFunc(self):
        assert self.hostName is not None, "hostname not set yet"
        ... # use hostName here

class temp(baseClass):
    def runTest(self):
        baseClass.hostName = getHostName()
        ...

or a global variable:

baseClass.py:

hostName = None
class baseClass:
    def someFunc(self):
        assert hostName is not None
        ....

testme.py:

import baseClass
class temp(baseClass.baseClass):
    ....
    baseClass.hostName = getHostName()

although neither solution strikes me as very elegant. I would normally pass
the hostname to the constructor of baseClass or use a separate 'settings'
module.

Global variables are per-module. Use the "global" keyword when assigning a
global variable in the 'current' module. Global variables of other modules
are properties of the module, use <module>.<name>. 

> 
> Also, functions in this file and in the imported parent class need
> PyHttpTestCase. Does there need to be an import statement in both
> files?

Yes. Don't worry, the work is done only once.

Regards,
Tijs



More information about the Python-list mailing list