Singleton implementation problems

Peter Otten __peter__ at web.de
Fri Jul 4 07:56:16 CEST 2008


Urizev wrote:

> Hi everyone
> 
> I have developed the singleton implementation. However I have found a
> strange behaviour when using from different files. The code is
> attached.
> 
> Executing main

> New singleton:
> <__main__.Singleton instance at 0x2b98be474a70>

> New singleton:
> <myset.Singleton instance at 0x2b98be474d88>

> I do not know why, but it creates two instances of the singleton. Does
> anybody know why?

Do you see it now I snipped the irrelevant output?

The problem is the structure of your program. The myset module is imported
twice by Python, once as "myset" and once as "__main__". Therefore you get
two distinct MySet classes, and consequently two distinct MySet.__instance
class attributes. 

Move the

if __name__ == "__main__": ...

statements into a separate module, e. g. main.py:

import myset
import member

if __name__ == "__main__":
    print "Executing main"
    set1 = myset.MySet()
    set2 = myset.MySet()

    mbr1 = member.Member()
    mbr2 = member.Member()
    mbr3 = member.Member()

Now main.py and member.py share the same instance of the myset module and
should work as expected.

Peter




More information about the Python-list mailing list