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 :

un fichier par classe [Fait]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut un fichier par classe
    Bonjour,

    Voilà j'ai fait un prog qui comporte une 10ene de classe.
    Pour l'instant j'ai tout dans un fichier....

    j'ai donc voulu diviser en plusieurs fichiers... cependant un probleme se pose :


    voilà j'ai une classe qui fait office de singleton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    from Fenetre import *
     
    class Partie:
        _Partie = None
     
        @staticmethod
        def getPartie():
            if Partie._Partie == None:
                Partie._Partie = Partie()
     
            return Partie._Partie
     
     
        def setFenetre(self, f):
            self._fenetre = f
     
        def initialiser(self):
            .....
            self._fenetre.afficher(para)
     
     
    if __name__ == "__main__":
        f = Fenetre()
        Partie.getPartie().setFenetre(f)
        f.autremethode()
    puis j'ai une classe fenetre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from Partie import *
     
    class Fenetre:
        def afficher(self, para):
            .....
     
        def autremethode(self):
            Partie.getPartie().initialiser()
    voilà mon probleme c'est qui rentre bien dans setFenetre(f) mais quand apres j'appelle f.autremethode(), il appel bien initialiser() de Partie mais il me dit que Partie n'a pas d'attribut _fenetre...., comme si mon singleton n'en etait plus un....alors que si je mets les 2 classes dans un fichier, tout marche parfaitement....

    si qqun a deja eu ce prob ?

    Note : dans l'etat actuel mon exemple peut paraitre sans aucun interet mais c'est sorti de son contexte

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Les attributs de classes commençant par un "_" ne sont accessibles que dans le module (le fichier) où ils sont définis, il en est de même pour les variables, fonctions et classes

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    ah.. il ne s'agit pas seulement pour indiquer si la variable est privee(__) ou protected(_) ?

    Mais je n'y accede que dans mon fichier "partie" a la variable _fenetre....donc ca devrai quand meme marcher, non?


  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    C'est normal, tu as une importation circulaire. Donc c'est pas bon.

    En gros l'interpréteur Python fait ceci:

    - lecture du fichier Partie
    - il voit un import fenetre
    - lecture du fichier fenetre (sans finir de lire le fichier Partie)
    - il voit un import Partie (mais comme le lecture du fichier Partie a été lancée donc il ne la relance pas)
    - il tombe sur un truc qui demande Partie (mais comme il n'a pas été chargée en entier, pour lui c'est quelquechose d'inconnu)

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    euh non, attention, il lance bien mon Partie.getPartie().initialiser() (si je met un print"dedans" ca affiche bien "dedans", c'est juste que c'est comme si mon
    Partie.getPartie().setFenetre(f) ne s'etait jamais fait ou qu'il m'a refait une instance de Partie..

    car c'est dans le inialiser qu'il me dit : partie n'a pas d'attribut _fenetre qui normalement s'initialiser avec setFenetre(f)

  6. #6
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Par défaut
    il faut declarer _fenetre dans le constructeur.

    Peut etre tu devra essayer ca
    class Partie:
    _Partie = None
    def __init__(self):
    self._fenetre=None

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2013, 19h22
  2. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  3. Peut on manipuler le système de fichier par T-SQL?
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2003, 09h19
  4. Réponses: 1
    Dernier message: 19/08/2003, 16h11
  5. Supprimer un fichier par rapport a une date
    Par NewB dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2003, 13h44

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