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 :

De la fonction à la Classe


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 71
    Points
    71
    Par défaut De la fonction à la Classe
    Salut à tous,

    Un petit exercice de calcul demande la saisie répétitive de plusieurs valeurs numériques entières.
    Pour contrôler et effectuer ces saisies, j'ai mis en place une fonction qui permet aussi de sortir éventuellement de l'application à ce moment là.
    A la fin de l'exercice, la fonction 'message', propose de recommencer un autre calcul.
    L'invite de la fonction 'message' est personnalisable car la fonction est utilisée aussi par l'input de la fonction saisie.
    Les 2 fonctions sont regroupées dans un module indépendant, l'ensemble est OK.

    J'ai essayé de convertir ces 2 fonctions en classe.
    La fonction 'saisie' est devenue la 'class SaisieInt():' elle utilise la fonction 'message' c'est toujours OK.

    Je ne réussis pas à convertir cette fonction 'message' en classe qui puisse être utilisée à la fois par la classe SaisieInt() et par l'invite de fin.

    Je cherche un conseil, un coup de main, un exemple.
    Merci d'avance.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    # le code avec les fonctions
    # Bout de code destiné à être utilisé en module indépendant
    #-------------------------------------------------------------------------------------------
    import sys
     
    def message(txtMessage):
        """ message interrogatif ( O / N ) personnalisable """
     
        rep = input(txtMessage + "\n\n    ( O / N )  ? ")
        return True if rep != chr(79) and rep != chr(111) else False
     
    def saisie(invite):
        """ Controle de saisie de valeurs 'int' avec possibilité de quitter l'application
            à chaque saisie par la touche < q > ou < Q >  """
     
        while True:
            rep = (input(invite))  # invite personnalisée
            if rep == 'q':
                if not message("Voulez-vous quitter  ?  "):
                    exit("Quitter")
            try:
                rep = int(rep)
                return rep
            except(ValueError, TypeError):
                print("erreur de saisie ",file = sys.stderr)
                pass
     
    if __name__ == '__main__':
     
        while 1:
            for var in 'abcd':
                laVar = saisie("Quelle valeur pour " + var + " ?")
                print(laVar)
     
            if not message("    <  O  > pour Quitter\n\
        autre pour recommencer"): exit("Fin") # != 'O' ou != 'o' pour relancer

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    # le code avec classe
    # Bout de code destiné à être utilisé en module indépendant
    #-------------------------------------------------------------------------------------------
    import sys
     
    class SaisieInt():
        """ Controle de saisie de valeurs 'int' avec possibilité de quitter l'application
            à chaque saisie par la touche < q > ou < Q >  """
     
        def __init__(self, intVar):
            self.v = intVar
     
        def controle(self):
            while True:
                rep = (input(self.v + " : "))     # invite personnalisée
                if rep in 'qQ':
                    if not message("Voulez-vous quitter  ?  "):
                       exit("Quitter")
                try:
                    rep = int(rep)
                    return rep
                except(ValueError, TypeError):
                    print("erreur de saisie ",file = sys.stderr)
                    pass
     
    def message(txtMessage):
        """ message interrogatif ( O / N ) personnalisable """
     
        rep = input(txtMessage + "\n\n    ( O / N )  ? ")
        return True if rep != chr(79) and rep != chr(111) else False
     
    if __name__ == '__main__':
     
        while 1:
            for var in 'abcd':
                laVar = SaisieInt("Quelle valeur pour " + var + " ?")
                print(laVar.controle())
     
            if not message("    <  O  > pour Quitter\n\
        autre pour recommencer"): exit("Fin") # != 'O' ou != 'o' pour relancer

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Salut,

    Citation Envoyé par luc pic Voir le message
    Je cherche un conseil, un coup de main, un exemple.
    Une classe est un objet qui peut avoir des attributs et auquel on peut expédier des messages (appeler des méthodes).
    Donc côté sémantique, un objet doit être le nom de quelque chose "machin" par exemple.
    Et les fonctions (et les méthodes) sont des verbes: saisir(_un_entier), afficher(_message) qui définissent une interface pour utiliser l'objet.

    Citation Envoyé par luc pic Voir le message
    Je ne réussis pas à convertir cette fonction 'message' en classe qui puisse être utilisée à la fois par la classe SaisieInt() et par l'invite de fin.
    Quel serait le nom de cet objet? Quels en seraient les attributs et les méthodes?
    Comment l'appelant (le code qui va l'utiliser) devra procéder pour...?
    Si vous ne savez pas répondre à ces questions, on ne peut pas "convertir" (sauf à forcer le trait mais çà n'a pas trop de sens).

    - W

  3. #3
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 71
    Points
    71
    Par défaut
    Salut W. et à tous,

    Merci pour la réponse.
    Pourrait-on dire ici que l'objet serait une sorte de 'boite dialogue' avec
    - des attributs 'message'
    - une méthode 'contrôle'
    qui 'fabriquerait' des valeurs filtrées ou bien, dans le cas qui m'occupe, l'usage des classes est-il inapproprié?

  4. #4
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 71
    Points
    71
    Par défaut
    Je pense avoir trouvé comment intégrer l'attribut 'message' dans la classe.
    Es-ce correct?

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    # Bout de code destiné à être utilisé en module indépendant
    #-------------------------------------------------------------------------------------------
    import sys
     
    class SaisieInt():
        """ Controle de saisie de valeurs 'int' avec possibilité de quitter l'application
            à chaque saisie par la touche < q > ou < Q >  """
     
        def __init__(self, intVar):
            self.v = intVar
     
        def controle(self):
            while True:
                rep = (input(self.v + " : "))     # invite personnalisée
                if rep in 'qQ':
                    if not SaisieInt.message("Voulez-vous quitter  ?  "):
                       exit("Quitter")
                try:
                    rep = int(rep)
                    return rep
                except(ValueError, TypeError):
                    print("erreur de saisie ",file = sys.stderr)
                    pass
     
        def message(txtMessage):
            """ message interrogatif ( O / N ) personnalisable """
     
            rep = input(txtMessage + "\n\n    ( O / N )  ? ")
            return True if rep != chr(79) and rep != chr(111) else False
     
    if __name__ == '__main__':
     
        while 1:
            for var in 'abcd':
                laVar = SaisieInt("Quelle valeur pour " + var + " ?")
                print(laVar.controle())
     
            if not SaisieInt.message("    <  O  > pour Quitter\n\
        autre pour recommencer"): exit("Fin") # != 'O' ou != 'o' pour relancer

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 920
    Points : 7 312
    Points
    7 312
    Par défaut
    Quel est l'intérêt de créer une classe SaisieInt ? C'est un exercice sur les classes ? Si oui, c'est une très mauvaise représentation de l'intérêt d'une classe...

    Dans ton cas de figure la fonction reste le plus simple.

  6. #6
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 71
    Points
    71
    Par défaut
    C'est bien un exercice sur les classes.
    Effectivement çà n'apporte rien de plus qu'avec les fonctions mais j'ai trouvé la réflexion intéressante.
    A+ et merci pour les réponses.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Citation Envoyé par luc pic Voir le message
    Es-ce correct?
    SaisieInt.message n'est pas une méthode mais une fonction rangée dans la classe SaisieInt, sinon pour l'appeler, vous auriez utilisé self.message(...).

    Citation Envoyé par luc pic
    Effectivement çà n'apporte rien de plus qu'avec les fonctions mais j'ai trouvé la réflexion intéressante.
    La POO est une technique de programmation en tant que telle et qui va plus loin que jouer avec "class".

    - W

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

Discussions similaires

  1. Appel de Fonction entre classes
    Par likenoother dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2006, 14h37
  2. [C#]Fonction ou classe ?
    Par pierre1256 dans le forum C#
    Réponses: 3
    Dernier message: 30/05/2006, 13h53
  3. fonctions et classes... quand les utiliser ?
    Par fastmanu dans le forum Langage
    Réponses: 6
    Dernier message: 03/04/2006, 00h39
  4. Accèss à des fonctions entre classes
    Par vincetrader dans le forum C++
    Réponses: 4
    Dernier message: 08/09/2005, 13h45
  5. fonction et classe tempalte
    Par narkhor dans le forum C++
    Réponses: 8
    Dernier message: 29/03/2005, 09h57

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