Singleton implementation problems

Peter Otten __peter__ at
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.

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 and share the same instance of the myset module and
should work as expected.


More information about the Python-list mailing list