Les attributs de classe statiques (!= des attributs d’objets)
class Carte_a_jouer ():
valeurs = (None, None, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")
couleurs = ("Coeur","Carreau","Trèfle","Pique")
# None : Déclaration de la valeur sans valeur, les cartes 0 et 1 n'existant pas
# les attributs statiques "valeurs" et "couleurs" sont déclarés à l'extérieur du constructeur
# ils ne sont pas des attributs d'objet mais des attributs de classe !!!!!!!
def __init__ (self,val,coul):
self.valeur = val
self.couleur = coul
def affiche_carte (self):
print (Carte_a_jouer.valeurs[self.valeur], "de", Carte_a_jouer.couleurs[self.couleur])
if __name__ == "__main__":
carte = Carte_a_jouer (2,2)
carte.affiche_carte ()
Exécution :
>>> 2 de Trèfle
Les attributs déclarés dans la classe au-dessus du constructeur (donc en-dehors de celui-ci) sont des attributs de classe statiques et non plus des attributs d’objets.
Rappel : if __name__ == « __main__ »:le programme s’exécute directement, main signifiant principal, donc « programme principal »
Petite variante avec la fonction input ( ):
class Carte_a_jouer ():
valeurs = (None, None, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")
couleurs = ("Coeur","Carreau","Trèfle","Pique")
# None : Déclaration de la valeur sans valeur, les cartes 0 et 1 n'existant pas
# les attributs statiques sont déclarés à l'extérieur du constructeur
def __init__ (self,val,coul):
self.valeur = val
self.couleur = coul
def affiche_carte (self):
print (Carte_a_jouer.valeurs[self.valeur], "de", Carte_a_jouer.couleurs[self.couleur],\
"est la carte que vous avez choisie")
if __name__ == "__main__":
print ("""
Valeurs pour une carte : 2 : 2, 3 : 3, 4 : 4, 5 : 5, 6 : 6,
7 : 7, 8 : 8, 9 : 9, 10 : 10 ,
11 : Valet, 12 : Dame, 13 : Roi, 14 : As
""")
print ("""
Couleurs pour une carte : 0 : Coeur, 1 : Carreau, 2 : Trèfle, 3 : Pique
""")
carte = Carte_a_jouer (val = int(input ("Valeur de la carte : ")),coul = int(input ("Couleur de la carte : ")))
carte.affiche_carte ()
Exécution :
>>>
Valeurs pour une carte : 2 : 2, 3 : 3, 4 : 4, 5 : 5, 6 : 6,
7 : 7, 8 : 8, 9 : 9, 10 : 10 ,
11 : Valet, 12 : Dame, 13 : Roi, 14 : As
Couleurs pour une carte : 0 : Coeur, 1 : Carreau, 2 : Trèfle, 3 : Pique
Valeur de la carte : 13
Couleur de la carte : 2
Roi de Trèfle est la carte que vous avez choisie
>>>
Petit script plus simple pour comprendre la différence entre attribut de classe et attribut d’objet :
class Test (object) :
a = "attribut de classe"
def __init__ (self):
self.b = "attribut d'objet"
if __name__ == "__main__":
testDattribut = Test ( )
print (testDattribut.b)
print (Test.a)
Exécution :
>>> attribut d'objet attribut de classe >>>
Pour utiliser le(s) attribut(s) de classe, il est inutile de créer un objet de cette classe puisque l’attribut est une propriété de la classe !!!!!!
class Test (object) :
a = "attribut de classe"
def __init__ (self):
self.b = "attribut d'objet"
if __name__ == "__main__":
print (Test.a)
Exécution :
>>> attribut de classe >>>