Un membre de classe (ou membre statique) est un attribut ou une méthode qui a une signification pour la classe entière et non pas pour une instance particulière de cette classe.
Pour illustrer ce nouveau concept, nous reprenons la classe Voiture du projet Voiture2 en y ajoutant des membres de classe. Cette nouvelle version de la classe Voiture se trouve dans le projet Voiture4 que vous trouverez dans le dossier Exemple-C-ProgObjet1/Voiture4.
Dans cette nouvelle version du projet, il est possible de créer plusieurs voitures. Les choix de l'utilisateur sont les mêmes, sauf que le l'utilisateur choisit également la voiture qu'il veut faire rouler. De plus la liste des voitures existantes est affichée après chaque action de l'utilisateur.
Nous allons ajouter deux attributs de classe à la classe Voiture:
Pour créer un attribut de classe, il suffit de l'initialiser à l'intérieur de la classe et en dehors de toute méthode. Par exemple pour les attributs de classe NV et LesVoitures du programme Voiture4 :
class Voiture : LesVoitures = [] NV = 0 . . .
Etant donné qu'un attribut statique s'applique à la classe entière et ne caractérise pas une instance particulière de cette classe, on peut y accéder même lorsqu'aucune instance de cette classe n'a été créée. La valeur d'un tel attribut n'est pas stockée dans les objets de la classe et sera représentée en mémoire une seule fois indépendament du nombre d'instances créées.
Pour accéder à un attribut de classe il faut le préfixer par le nom de la classe suivi d'un point. Dans notre exemple, Voiture.NV permet d'accéder à l'attribut NV de la classe Voiture.
Une méthode de classe est une méthode qui agit sur les attributs de classe. Elle ne peut donc pas agir sur un attribut quelconque (c'est à dire non statique) d'une instance particulière. Une telle méthode se déclare en Python à l'aide du mot clé @staticmethod qui doit précéder l'entête.
Dans la classe Voiture du programme Voiture4, nous avons ajouté deux méthodes de ce type:
Voici le code la méthode Ajouter:
@staticmethod def Ajouter (v) : Voiture.LesVoitures.append(v) Voiture.NV+=1
Et voici celui de la méthode AfficherToutesLesVoitures:
def AfficherToutesLesVoitures (): print("\n\t----------- Liste des voiture --------------------") for i in range(0,Voiture.NV) : v = Voiture.LesVoitures[i] print("\tVoiture",i,": immat : "+ \ v.Immat+" compteur: ",v.Compteur)
Ces deux nouvelles méthodes sont appelées dans les procédures appelées par les choix Nouvelle voiture et Rouler. Voici leur code:
def Choix_Nouvelle_Voiture () : print( "\n\t---- CREATION D'UNE NOUVELLE VOITURE ------") im=input("\tImmatriculation : ") LaVoiture = Voiture(im) Voiture.Ajouter(LaVoiture) Voiture.AfficherToutesLesVoitures()
def Choix_Rouler () : numero = int(input("\tNumero de la voiture : ")) d = int(input("\tDistance : ")) LaVoiture = Voiture.LesVoitures[numero] LaVoiture.Rouler(d) Voiture.AfficherToutesLesVoitures()