STATIC Singleton Design Pattern Decorator
    Class is initialized with arguments passed into the decorator.

    :Usage: 
     >>> @static_singleton('yop')
        class Bob(Person):
            def __init__(arg1):
                self.info = arg1
            def says(self):
                print self.info
        b1 = Bob #note that we call it by the name of the class, no instance created here, kind of static linking to an instance
        b2 = Bob #here b1 is the same object as b2
        Bob.says() # it will display 'yop'

def static_singleton(*args, **kwargs):
    """
    STATIC Singleton Design Pattern Decorator
    Class is initialized with arguments passed into the decorator.

    :Usage: 
     >>> @static_singleton('yop')
        class Bob(Person):
            def __init__(arg1):
                self.info = arg1
            def says(self):
                print self.info
        b1 = Bob #note that we call it by the name of the class, no instance created here, kind of static linking to an instance
        b2 = Bob #here b1 is the same object as b2
        Bob.says() # it will display 'yop'
    """

    def __static_singleton_wrapper(cls):
        if cls not in __singleton_instances:
            __singleton_instances[cls] = cls(*args, **kwargs)

        return __singleton_instances[cls]

    return __static_singleton_wrapper