[Tutor] Global values & import scope

Wesley Brooks wesbrooks at gmail.com
Wed Jan 24 15:11:44 CET 2007


Thanks for your help I tested what you two said as follows and it
worked great. Thank you.

(Bellow in file TEST_ClassID.py)
class AssemblyItem:
    itemID = 0
    def __init__(self):
        self.ID = "assemblyItem" + str(AssemblyItem.itemID)
        AssemblyItem.itemID += 1

    def ReturnID(self):
        return self.ID

(Bellow in file TEST_ImportID1.py)
from TEST_ClassID import AssemblyItem

class Parent1:
    def __init__(self):
        self.testList = []

    def PrintID(self):
        self.testList.append(AssemblyItem())
        print self.testList[-1].ReturnID()

(Bellow in file TEST_ImportID2.py)
from TEST_ClassID import AssemblyItem

class Parent2:
    def __init__(self):
        self.testList = []

    def PrintID(self):
        self.testList.append(AssemblyItem())
        print self.testList[-1].ReturnID()

(Bellow, the commands run in the python terminal in the same directory)
>>> from TEST_ClassID1 import Parent1
>>>from TEST_ClassID2 import Parent2
>>>a = Parent1()
>>>b = Parent2()
>>>a.PrintID()
assemblyItem0
>>>a.PrintID()
assemblyItem1
>>>b.PrintID()
assemblyItem2
>>>b.PrintID()
assemblyItem3
>>>a.PrintID()
assemblyItem4
>>>b.PrintID()
assemblyItem5

Thanks again for your help.

Wesley Brooks.


On 24/01/07, Kent Johnson <kent37 at tds.net> wrote:
> Wesley Brooks wrote:
> > Dear Users,
> >
> > I'm using global values to create a unique ID, or name for each
> > instance of a class. If I import the following in one file and test it
> > it works fine. If the following class was imported in two different
> > files run by the same program would each instance of the class have a
> > unique name, or would they only be unique within the scope of the file
> > which contains the import of the bellow class?
> >
> > itemID = 0
> > class AssemblyItem:
> >     def __init__(self):
> >         global itemID
> >         self.ID = "assemblyItem" + str(itemID)
> >         itemID += 1
>
> That will work fine. When a module is imported twice, the second import
> received a cached copy of the same module; the module is only
> instantiated once. The variable itemID will just exist in one place, in
> the single instance of the module, and AssemblyItems created from
> different clients will all share the same counter.
>
> Kent
>
>


More information about the Tutor mailing list