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:
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:
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 |