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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| #!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Application:
"""
Mon application fait ceci cela
"""
# ici, on déclare un dictionnaire de valeurs
# accessibles par valeurs numériques
NIVEAU_JOUEUR = {
0: "débutant",
10: "moyen",
20: "expert",
100: "champion",
}
# constructeur de la classe
# pour obtenir une instance (copie) personnalisée
# de la classe dans un objet
def __init__ (self, niv_joueur):
"""
on choisit les paramètres que l'on veut voir figurer
lors de l'initialisation de la classe; ici, on attend
@niv_joueur lors de la création d'un objet Application();
"""
# membre de la classe
# le pointeur self désigne
# l'instance de la classe
# en cours d'utilisation
self.niveau_joueur = niv_joueur
# end def
def str_niveau_joueur (self):
"""
si on veut le texte à la place de la valeur numérique,
on appelle cette méthode;
"""
return self.NIVEAU_JOUEUR[self.niveau_joueur]
# end def
@property
def niveau_joueur (self):
"""
cette notation spéciale permet de gérer spécifiquement
un membre de la classe comme une propriété de classe;
n'a de réel intérêt que si vous avez un traitement
particulier à y faire;
"""
return self.__niveau_joueur
# end def
@niveau_joueur.setter
def niveau_joueur (self, value):
"""
c'est ici qu'on contrôle si la valeur @value affectée à
self.niveau_joueur existe dans le dictionnaire
NIVEAU_JOUEUR que nous avons déclaré en tête de classe;
accessoirement, on peut aussi gérer les erreurs, mais ce
n'est pas obligatoire, étant donné que Python lèvera une
exception si quelque chose ne va pas;
"""
# on décide de gérer les erreurs
if value not in self.NIVEAU_JOUEUR:
raise ValueError("la valeur demandée n'est pas prise en charge.")
else:
self.__niveau_joueur = value
# end if
# end def
@niveau_joueur.deleter
def niveau_joueur (self):
"""
on gère aussi la destruction d'une propriété si l'on a
déclaré des membres privés comme self.__niveau_joueur,
par exemple;
"""
del self.__niveau_joueur
# end def
# end class Application
# test
# avec un niveau joueur CORRECT
mon_appli = Application(10)
# on choisit d'afficher
# ET la valeur numérique
# ET le texte correspondant
print(
"Niveau joueur : {niv} - {txt}"
.format(
niv=mon_appli.niveau_joueur,
txt=mon_appli.str_niveau_joueur(),
)
)
# en précisant le paramètre nommément
mon_appli = Application(niv_joueur=10)
# on choisit d'afficher
# ET la valeur numérique
# ET le texte correspondant
print(
"Niveau joueur : {niv} - {txt}"
.format(
niv=mon_appli.niveau_joueur,
txt=mon_appli.str_niveau_joueur(),
)
)
# avec un niveau joueur INCORRECT
mon_appli = Application(50)
# on se prend l'erreur qu'on a gérée
# i.e. ValueError: bla bla bla... |
Partager