IMHO, some of (a lot of ?) the "classical" GOF patterns do not really apply to Python (or at least are not necessary, when not making things more confuse). They are often a consequence of constraints and limitations of statically compiled languages such as C++, Java and alike used at the time they have been created, but they loose most of their interest for languages such as Python.
If the singleton instance is used internally by your application code, and apart if you have really good reasons for making things more complicated, juts use a module level variable to store the instance, and initialize it at application start. Of course, forbid yourself to write to this variable from elsewhere than the app initialization code.
If the singleton creation can be called from other places (f.i. if a lazy initialization strategy is used), and if there are possibilities for it to be called several times, a guard can be implemented by providing a factory function which will test if the instance is currently None, instantiate one if needed, store it in the module variable, and return the module variable at the end. It would look like this:
_singleton_instance = None
def get_singleton():
if _singleton_instance is None:
_singleton_instance = ....
return
_singleton_instance
The '_' prefix of the singleton variable is use to indicate that this is a "private" variable which must not be referred to (even in read access) from outside the module.
Hope this helps.
Regards
Eric