IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Pb Singleton !


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut Pb Singleton !
    Bonjour,

    Je suis partie d'un exemple de code sur wikipedia que j'ai retrouvé sur de nombreux site.

    http://fr.wikipedia.org/wiki/Singlet...ntation_simple

    Cepandant, chaque fois que je fais appel à Controller.Controller() depuis un autre fichier, je repasse dans la partie de création de mon singleton. Ce qui n'est pas normal puisque la variable statique instance ne devrait plus être à None...

    Vous y voyez un hic vous ? y aurait t-il un soucis, du fait que ceci est appelé depuis un autre module ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Controller:
    	instance = None       # Attribut statique de classe	
     
    	def __init__(self):
    		print "init controller"
     
     
    		if self.instance is None:			
    			print "new Controller SINGELTON"
    			self.instance = object.__init__(self)
    			print "instance"
    			print self.instance
    		return self.instance

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    Salut,

    la méthode spécial __init__ ne renvoie rien et intervient après la création de l'objet. C'est __new__ qu'il faut surcharger ici.

    c'est d'ailleurs ce que propose l'exemple de wikipedia que tu as linké

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    Non, en fait, j'avais essayé avec new et init et ça ne marchait pas. Mais j'ai trouvé !
    en fait, c'est parce qu'il faut dériver de object... pour que ça marche ^^

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,
    Le code que j'utilise est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Controller(object):
    	_instance_ = None       # Attribut statique de classe	
     	def __new__(cls, *args, **kwds):
                 instance = cls._instance_
                 if instance is None:
                      instance = cls._instance_= object.__new__(cls)
                      setattr(instance, '_init_done_', False)
                 return instance
            def __init__(self, ....): # les arguments passés
                 if self._init_done_: return
                 # initialisation.
    Un singleton n'est généralement pas "héritable", il faut utiliser un "monostate" (Borg singleton en Python) pour avoir la fonction "singleton" + héritage.
    Mais vous faites ce que vous voulez...
    Cordialement
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    Oui, c'est ce que j'ai fait :

    class Controller(object):

    object, c'est la classe dont on dérive ? Je débute encore, du coup, je vais bien regarder de quoi il s'agit sinon ^^

    En tout cas, merci pour votre temps.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par zuzuu Voir le message
    class Controller(object):
    object, c'est la classe dont on dérive ?
    Pour que __new__ fonctionne, il faut sous les versions de Python 2.x, avec x >= 4 déclarer la classe "new style class": c'est ce que réalise la dérivation "object".
    En 3.x, ce n'est plus nécessaire mais le code devrait être "compatible".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    Merci pour l'info !!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Servlet]Singleton & cache
    Par lucimast dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 15/12/2004, 16h36
  2. Singleton héritable ?
    Par rolkA dans le forum C++
    Réponses: 10
    Dernier message: 11/12/2004, 16h22
  3. [Débutant] pattern singleton
    Par SirDarken dans le forum Débuter avec Java
    Réponses: 22
    Dernier message: 11/12/2004, 01h55
  4. Mutiple row in singleton select ????? [Important, merci]
    Par SkyDev dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/04/2004, 14h02
  5. [debutant]Singleton
    Par bafman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/01/2004, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo