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