| 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
| #!/usr/bin/python
class matrice:
def __init__ (self, laListe):
self.liste =[]
self.liste = laListe
print "creation de matrice!!"
def __add__(self,autreMatrice =[]):
if len (autreMatrice)- len (self) == 0:
matriceSomme =[]
#initialisation
for valeur in range(0, len (self.liste)):
matriceSomme.append(0)
#somme
for valeur in range(0, len (self.liste)):
matriceSomme[valeur] = self.liste[valeur] + autreMatrice.liste[valeur]
return matrice(matriceSomme) #renvoie d'une autre instance
else:
print " les matrices doivent être de même taille !"
def __repr__ (self):
return str( self.liste)
def __len__(self):
return len(self.liste)
#permet de tester " for i in matrice", "if i in matrice" et l'acces matrice[i]
def __getitem__(self, indice):
return self.liste[indice]
def __delitem__(self,indice):
del self.liste[indice]
def __setitem__ (self, cle,valeur):
self.liste[cle] = valeur
def __del__(self):
del self.liste
print "destruction de matrice!"
def __getattr__(self, nomAttribut):
if nomAttribut == "valeur":
print "la matrice n'a pas d'attribut 'valeur'. Utilise matrice.liste"
return None
else:
raise AttributeError, nomAttribut
#sur self > x, x == self, cmp(self,x) .... renvoie -1,0,1 si inferieur,0,superieur
def __cmp__(self, autreMatrice):
#on definit la comparaison avec ces matrices "spéciales" en sommant tous les
#element de la liste et en comparant cette somme
sommeSelf =0
sommeAutre =0
def calculSommeListe(laMatrice):
somme = 0
for valeur in laMatrice:
somme += valeur
return somme
sommeSelf = calculSommeListe (self)
sommeAutre = calculSommeListe(autreMatrice)
if(sommeSelf>sommeAutre):return 1
elif (sommeSelf == sommeAutre): return 0
else: return -1
def afficheMethodesEtAttributs(self):
print
print "affichage des méthodes"
for methode in dir(self):
print methode
print "mat1"
mat1 = matrice([1,2,3])
print mat1
print "mat2"
mat2 = matrice([3,2,1])
print mat2
print "SURCHARGE DE + avec __add__"
print "mat3 :mat1 +mat2"
mat3 = mat1 + mat2
print mat3
print
print "matrice de taille differente"
print "mat 4"
mat4 = matrice([70,3,26,1])
print mat4
print "mat 1"
print mat1
print" mat1 + mat4"
mat5 = mat1+mat4
print
print "SURCHARGE INDICAGE:__getitem__ et __setitem__"
print "la matrice 1: " + str(mat1)
#indicage __getitem__ : pour acceder aux valeurs, il faut surcharger __getitem__
print "la matrice 1: mat1[2] : " + str( mat1[2])
#indicage __setitem__
print "on modifie la valeur- pour que ce soit possible il faut surcharger __setitem__: mat1[2] = 28"
mat1[2] =28
print "la matrice 1: mat1[2] = 20 : " + str(mat1)
#
print
print "TEST D'appartenance et iteration dans boucle grace à__getitem__ surchargé"
print "element de mat4"
for element in mat4:
print "#" + str( element ),
print
if 2 in mat1:
print "2 appartient à mat1"
if not 20 in mat1:
print "mais pas 20"
print
#essais avec des attributs inexistant
print"TEST De GESTION des attributs inexistants"
print "---------"
print "avec des attributs inexistant mais accepté"
print mat1.valeur
print "---------"
try:
print "avec des attributs inexistant mais non accepté"
print mat1.nimporteQuoi
print "---------"
except (AttributeError):
print "Attribut qui n'a aucun sens sur une matrice !"
#essais de comparaison:
print
print "TEST COMPARAISON grace à la surcharge de __cmp__:"
print "mat6"
mat6 = matrice([1,2,3])
print mat6
print "mat7"
mat7 = matrice([3,2,1])
print mat7
if (mat6 == mat7):
print "matrice égale!"
print
print "mat8:"
mat8 = matrice([3,8,9])
print mat8
if (mat6 == mat8):
print "matrice égale!"
elif mat6 > mat8:
print "mat6 superieur à mat8"
elif mat6 < mat8:
print "mat6 inférieur à mat8"
print
print "TEST affichage des methodes de la classe"
#affichage des methodes de la classes matrices
mat8.afficheMethodesEtAttributs()
print
print "TEST de DESTRUCTION D'un item puis destruction de la class:"
print" Surcharge de __DELITEM__ et __del__"
#__DELITEM__
print mat4
print"del mat4[3]"
del mat4[3]
print mat4
#~ #DEL
del mat4
try:
print mat4
except (NameError):
"mat4 a bien été détruite!"
print "-----------------------"
print "fin de l'application"
print" destruction des autres matrices" |