Ecrire un singleton en langage python
De Wikip
Révision datée du 17 février 2010 à 22:24 par Atoross (discussion | contributions)
Auteurs :
Arthur TOROSSIAN
Résumé :
Voici un petit code écrit en python qui explique comment écrire un singleton en langage python. Notez bien que dans la méthode __init__ il faut faire quelques vérifications notamment avec les listes.
class CSingleton( object ):
class_instance = None
def __init__( self, a ):
print "CSingleton init"
self.vitesse = a
if not hasattr( self, "alist") :
self.alist = list()
def __new__( typ, *args, **kwargs ):
print "CSingleton new", typ.class_instance
if typ.class_instance == None :
obj = object.__new__( typ, *args, **kwargs)
typ.class_instance = obj
else :
obj = typ.class_instance
return obj
def addObject(self, obj):
self.alist.append( obj )
if __name__ == '__main__' :
a = CSingleton( 1 )
a.addObject( "Lundi" )
print "a.vitesse=",a.vitesse
print "a.alist=",a.alist
b = CSingleton( 2 )
b.addObject( "Mardi" )
print "b.vitesse=",b.vitesse
print "b.alist=",b.alist
c = CSingleton( 3 )
c.addObject( "Mercredi" )
print "c.vitesse=",c.vitesse
print "c.alist=",c.alist
print "a.vitesse=",a.vitesse
print "a.alist=",a.alist
print "b.vitesse=",b.vitesse
print "b.alist=",b.alist
print "c.vitesse=",c.vitesse
print "c.alist=",c.alist
print "id(a)=",id(a)
print "id(b)=",id(b)
print "id(c)=",id(c)
Ce qui donne :
python singleton.py
CSingleton new None
CSingleton init
a.vitesse= 1
a.alist= ['Lundi']
CSingleton new <__main__.CSingleton object at 0xb7cf8ecc>
CSingleton init
b.vitesse= 2
b.alist= ['Lundi', 'Mardi']
CSingleton new <__main__.CSingleton object at 0xb7cf8ecc>
CSingleton init
c.vitesse= 3
c.alist= ['Lundi', 'Mardi', 'Mercredi']
a.vitesse= 3
a.alist= ['Lundi', 'Mardi', 'Mercredi']
b.vitesse= 3
b.alist= ['Lundi', 'Mardi', 'Mercredi']
c.vitesse= 3
c.alist= ['Lundi', 'Mardi', 'Mercredi']
id(a)= 3083833036
id(b)= 3083833036
id(c)= 3083833036