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 :

Création d'une classe


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Points : 20
    Points
    20
    Par défaut Création d'une classe
    Bonsoir je voudrais transformer un code en classe mais je n'y arrive pas malgré tous mes efforts. Voilà le code:

    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
    def set_value(value):
        chars,space= "%KM","\t"
        return space.join((elem.rstrip(chars)for elem in value.split()))
     
    def chemin(pays1, indi1):
        return "Indice/pays/indi.txt".replace("pays" , pays1).replace("indi" , indi1)
     
     
    def ecriture(ch):
        with open (ch,"r") as f:
            for line in map(set_value,f):
                line=line.replace("," , ".")
                print(line)
     
    Pays= input("Taper état")
    Indi= input("Taper indice")
     
    a= ecriture(chemin(Pays,Indi))

    En gros je voudrai que ma classe me sorte les élément de mon fichier mais en les ayant transformé ( ce que j'ai réussi à faire en mode programme simple).
    Maintenant la difficulté est de faire de ce petit programme une classe.

    Merci de votre aide.

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Envoie nous aussi un bout de code provenant de ce que tu as essayé en terme de classe.

    Mais à priori, ça devrait avoir la structure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Chemin :
         def __init__(self, pays, indi):
               #### A completer
     
         def ecriture(self):
               #### A completer
     
    Pays= input("Taper état")
    Indi= input("Taper indice")
     
    un_chemin = Chemin(Pays,Indi)
    un_chemin.ecriture()
    J'ai enlevé la fonction set_values, qui à mon sens présente peu d'intérêt (autant l'incorporer directement dans la fonction ecriture)

    Et essaie de regarder (avant toutes choses peut etre) la manière dont tu traites tes chaines de caractère. Il y a plein de chose qui se font beaucoup plus simplement. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def chemin(pays1, indi1):
        return "Indice/pays/indi.txt".replace("pays" , pays1).replace("indi" , indi1)
    s'écrit plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def chemin(pays, indi):
        return "Indice/"+pays+"/"+indi+".txt"
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def chemin(pays, indi):
        return "Indice/%s/%s.txt"%(pays,indi)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Voilà la classe que j'ai réalisé avec votre aide



    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
    27
    28
     
     
     
    class Chemin:
        def __init__(self, pays, indi):
            self.pay = pays
            self.indices = indi
     
        def ecriture(self):
     
            def set_value(value):
                chars, space = "%KM", "\t"
                return space.join((elem.rstrip(chars) for elem in value.split()))
     
            def chem(self):
                return "Indice/%s/%s.txt"%(self.pay,self.indices)
     
            with open(chem, "r") as f:
                for line in map(set_value, f):
                    line = line.replace(",", ".")
                    print(line)
     
     
    pays= "USA"
    indi="Commandes de biens durables"
     
    unChemin= Chemin(pays,indi)
    unChemin.ecriture()
    Mais une erreur apparaît:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    C:\Python33\python.exe C:/Users/djodjo/PycharmProjects/untitled5/Propre.py
    Traceback (most recent call last):
      File "C:/Users/djodjo/PycharmProjects/untitled5/Propre.py", line 25, in <module>
        unChemin.ecriture()
      File "C:/Users/djodjo/PycharmProjects/untitled5/Propre.py", line 15, in ecriture
        with open(chem, "r") as f:
    TypeError: invalid file: <function Chemin.ecriture.<locals>.chem at 0x028912B8>
     
    Process finished with exit code 1

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Normal.
    Tu definis chem comme une fonction.
    Donc si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open(chem, "r") as f:
    tu récupères la fonction chem, et non son résultat !


    Ensuite pourquoi faire tant de fonctions ? Dans le __init__ qqch comme ça ne suffirait-il pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.chem = "Indice/%s/%s.txt"%(self.pay,self.indices)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    J'ai réussi à faire la classe mais je n'arrive pas à faire sortir toutes les lignes du fichier

    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
     
    class Chemin:
        def __init__(self, pay, indi):
            self.pay = pay
            self.indices = indi
     
     
        def ecriture(self):
     
            def set_value(value):
                chars, space = "%KM", "\t"
                return space.join((elem.rstrip(chars) for elem in value.split()))
     
     
            self.chem= "C:/Users/djodjo/PycharmProjects/untitled5/Indice/%s/%s.txt"%(self.pay,self.indices)
     
            with open(self.chem, "r") as f:
                for line in map(set_value, f):
                    line = line.replace(",", ".")
                    return line
    Quand je met return line ça me sort la première ligne du fichier,
    Alors que quand je remplace " return line " par " print ( line) " ça m'écrit toutes les lignes mais au lieu de sauvegarder les donnés dans la classe, à chaque exécution du programme toutes les lignes sont affichés. J'aimerai que les donnés ne s'affichent pas à chaque appel de la classe mais soient enregistré dedans. Quand je me ni return ni print et que j'appel la classe ça me met qu'il n'y a rien dedans.

    Appel de la classe contenu dans le fichier lesClasses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from lesClasses import*
     
    pays="USA"
    indi="Commandes de biens durables"
     
     
    unChemin= Chemin(pays,indi)
    print(type(unChemin.ecriture()))

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par djobadi Voir le message
    Quand je met return line ça me sort la première ligne du fichier,
    Alors que quand je remplace " return line " par " print ( line) " ça m'écrit toutes les lignes mais au lieu de sauvegarder les donnés dans la classe, à chaque exécution du programme toutes les lignes sont affichés.
    Et pourquoi ne pas prendre le temps d'ouvrir un tuto pour y apprendre structures et constructions de base comme listes et dictionnaire, boucles et fonctions?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Une classe ne va pas miraculeursement changée le comportement du code de ton premier post. Si un code ne fonctionne pas comme tu veux, alors corrige cela AVANT de faire une classe. Même je dirais, supprime les fonctions aussi si ca t'embrouille. Tu structurera après.

    Tu ne fais donc pas les choses dans le bon ordre. Là t'es bon pour corriger ton code départ, avant d'en faire une classe...

    Effectivement wiztricks a raison : plonge toi dans un tuto car il semble te manquer de sérieuses bases.

Discussions similaires

  1. Création d'une classe ASP (connection & recordset)
    Par polothentik dans le forum ASP
    Réponses: 1
    Dernier message: 12/03/2008, 00h46
  2. [POO] création d'une classe de connexion
    Par artotal dans le forum Langage
    Réponses: 1
    Dernier message: 14/02/2008, 12h01
  3. Réponses: 3
    Dernier message: 06/05/2007, 19h46
  4. [C++] Création d'une classe dans un fichier
    Par Pfeffer dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/05/2007, 15h49
  5. Création d'une class contenant un TEdit (Débutant)
    Par Dereck07 dans le forum Delphi
    Réponses: 5
    Dernier message: 01/05/2007, 17h02

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