La méthode standard de faire singletons en Python estsingletons Google App Engine (Python)
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
Cependant, cela ne fonctionne pas sur App Engine, car il y a peut-être de nombreux serveurs et nous obtiendrions une instance par serveur. Alors, comment le ferions-nous pour une entité de moteur d'application?
Quelque chose comme:
class MySingleton(db.models):
def __init__(self):
all = MySingleton.all()
if all.count() > 0:
return all.fetch(1).get()
super(MySingleton, self).__init__ (*args, **kwargs)
Cela conduit à une erreur de recusion, depuis get()
appels __init__
.
Comment nous allons l'utiliser:
Nous voulons simplement représenter un fichier de configuration, à savoir:
{ 'sitename': "My site", 'footer': "This page owned by X"}
Il serait plus facile de suggérer une solution si vous nous dites ce dont vous avez besoin pour un singleton. –
@Nick: fait, merci. –
Pourquoi utiliser un objet pour un fichier de configuration? Ayez juste un fichier .py avec des définitions de variable pour vos variables de configuration. –