Scope - import and globals

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • HMS Surprise

    #1

    Scope - import and globals


    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.

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


    Thanks,

    jh

    #~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~


    from PyHttpTestCase import PyHttpTestCase
    from baseClass import baseClass

    # definition of test class
    class temp(baseClass) :

    def runTest(self):
    global hostName
    hostName = getHostNameFrom User()
    self.logon()

  • Troels Thomsen

    #2
    Re: Scope - import and globals


    "HMS Surprise" <john@datavoice int.comskrev i en meddelelse
    news:1180455769 .891470.116360@ p47g2000hsd.goo glegroups.com.. .
    >
    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.
    >
    Also, functions in this file and in the imported parent class need
    PyHttpTestCase. Does there need to be an import statement in both
    files?
    >
    If a file needs an import, make the import!
    Dont rely on other file's imports , in general, imho.

    Not sure excactly what you are doing, but are you sure you dont want an
    instance variable instead of a global ?
    self.hostName = "blah"
    And then a getHostName() method in the class ?

    regards
    Troels



    Comment

    • Tijs

      #3
      Re: Scope - import and globals

      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.hostN ame = 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.hostN ame = 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

      Comment

      Working...