fichier=open('monfichier.txt','w') >>> fichier.write('bonjour\n') 8 >>> liste ['le chien', 'le chat', 'le loup'] >>> for s in liste: fichier.write(s+'\n') 9 8 >>> fichier.close() >>> fichier=open('monfichier.txt','r') >>> fichier.readline() 'bonjour\n' >>> for ligne in fichier: ligne.replace('\n','!') 'le chien!' 'le chat!' 'le loup!' >>> fichier.close()
>>> contacts={'robert':123,'jean':567,'paul':646} >>> fichier=open('contacts.pkl','wb') >>> import pickle >>> pickle.dump(contacts,fichier) >>> fichier.close() >>> fichier=open('contacts.pkl','rb') >>> c=pickle.load(fichier) >>> fichier.close() >>> c {'jean': 567, 'robert': 123, 'paul': 646}
JSON est un standard simple pour la sauvegarde d’information >>> steph={"prenom":"Stephen","nom":"Harper"} >>> steph {'nom': 'Harper', 'prenom': 'Stephen'} >>> justin={"prenom":"Justin","nom":"Trudeau"} >>> tom={"prenom":"Thomas","nom":"Mulcair"} >>> e1={"id":123,"employe":steph,"fonction":"developpeur","supervise":[456,987]} >>> e2={"id":456,"employe":justin,"fonction":"secretaire","supervise":[222]} >>> e3={"id":987,"employe":tom,"fonction":"testeur","supervise":[]} >>> liste=[e1,e2,e3] >>> import json >>> json.dump(liste,fp=open('monjson.txt','w'),indent=4)
>>> print(open('monjson.txt').read()) [ { "employe": { "nom": "Harper", "prenom": "Stephen" }, "id": 123, "supervise": [ 456, 987 ], "fonction": "developpeur" }, { "employe": { "nom": "Trudeau", "prenom": "Justin" }, "id": 456, "supervise": [ 222 ], "fonction": "secretaire" }, { "employe": { "nom": "Mulcair", "prenom": "Thomas" }, "id": 987, "supervise": [], "fonction": "testeur" } ]
>>> d=json.loads(open('monjson.txt').read()) >>> d [{'id': 123, 'employe': {'nom': 'Harper', 'prenom': 'Stephen'}, 'supervise': [456, 987], 'fonction': 'developpeur'}, {'id': 456, 'employe': {'nom': 'Trudeau', 'prenom': 'Justin'}, 'supervise': [222], 'fonction': 'secretaire'}, {'id': 987, 'employe': {'nom': 'Mulcair', 'prenom': 'Thomas'}, 'supervise': [], 'fonction': 'testeur'}] >>> d[0] {'id': 123, 'employe': {'nom': 'Harper', 'prenom': 'Stephen'}, 'supervise': [456, 987], 'fonction': 'developpeur'} >>> d[0]['id'] 123 >>>
La classe est l’entité regroupant propriétés et comportements des objets ◦ Encapsulation: attributs et méthodes sont associés à la classe En Python, l’encapsulation se fait en créant des portées associées à chaque objet Un objet définit un espace de nom ◦ Cachage de l’information: l’utilisateur de la classe n’a accès qu’à l’interface publique d’une classe; la mécanique interne est cachée et les attributs ne sont pas accessibles directement Python ne permet pas de définir une visibilité privée pour les attributs La convention est que les variables débutant par un _ ou __ ne devrait pas être modifiées par l’utilisateur de la classe En fait, dans la classe abc, l’attribut __xyz deviendra _abc__xyz
L’énoncé class créé un objet de type classe et lui associe un nom ◦ La définition existe seulement lorsque l’énoncé est exécuté Une affectation dans une classe créé un attribut de classe La définition d’une fonction dans une classe créé une méthode Le mot-clé self permet de définir des attributs associé à chaque objet L’appel à un objet de classe en tant que fonction va créer une instance de cette classe (un objet)
>>> class MaClasse: attributDeClasse=8 def setData(self,valeur): self.data=valeur def affiche(self): print(self.data,MaClasse.attributDeClasse ) >>> MaClasse.attributDeClasse 8 >>> x=MaClasse() >>> x.setData(99) >>> x.affiche() 99 8 >>> y=MaClasse() >>> y.setData(27) >>> y.affiche() 27 8 >>> x.affiche() 99 8 >>> MaClasse.attributDeClasse=11 >>> x.affiche() >>> y.affiche() >>> x.extra=8 >>> x.data=77 >>> x.affiche() 77 11
L’énoncé __init__ permet de définir ce qui se passe lorsqu’un objet est inititialisé En général, les énoncés encadrés de __ ont une signification spéciale ◦ __str__ permet de définir la conversion vers une chaine de caractères ◦ __repr__ agit comme __str__ mais est plus général (mais moins prioritaire) ◦ Cette notation est aussi utilisée pour la surcharge d’opérateurs __add__ définit le + pour les objets de cette classe
>>> class CompteDeBanque: def __init__(self,nom): self.nom=nom self.solde=0 def depot(self,montant): self.solde+=montant def __repr__(self): return 'Compte de %s: $%d' %(self.nom,self.solde) >>> r=CompteDeBanque('Robert') >>> r.depot(100) >>> r.depot(10) >>> print(r) Compte de Robert: $110 >>> r Compte de Robert: $110
L’héritage est un mécanisme essentiel pour la programmation orientée objet ◦ La spécialisation est le concept permettant de créé des sous-classes à une classe Et de leur donner de nouveaux comportements, de nouvelles propriétés ◦ Réciproquement pour la généralisation La sous-classe hérite des propriétés et des comportements de la super-classe ◦ Les attributs et méthodes de la super-classes sont accessibles à la sous-classe ◦ Une super-classe sans attributs sera une interface
Les super-classes d’une classe sont spécifiées à l’intérieur de la paranthèse de définition >>> class CompteCheque(CompteDeBanque): def __init__(self,nom): # super(). __init__(self,nom) aussi possible CompteDeBanque.__init__(self,nom) self.frais=1 def depot(self,montant): self.solde+=montant-self.frais >>> m=CompteCheque('Marie') >>> m.depot(200) >>> print(m) Compte de Marie: $199
La composition est le fait d’inclure des objets d’une classe dans les attributs d’une autre classe ◦ Si l’objet inclus survit à la destruction de l’objet qui le contient, on parle alors d’agrégation >>> class CompteDeBanque: def __init__(self,prenom,nom): self.nom=Personne(prenom,nom) self.solde=0 def depot(self,montant): self.solde+=montant def __repr__(self): return 'Compte de %s: $%d' %(self.nom,self.solde) >>> r=CompteDeBanque('Maurice','Richard') >>> r.depot(100) >>> r Compte de Maurice Richard: $100 >>> class Personne: def __init__(self,prenom,nom): self.prenom=prenom self.nom=nom def __str__(self): return self.prenom + ' ' + self.nom