Si vous ne voulez pas faire implicitement des copies de init_value
vous pouvez également changer Matrix.addValue
à ceci:
def addValue(self,i,j,value):
self.matrix_list[i][j] = value
Ceci est un peu plus conforme à la façon dont votre matrice fonctionne actuellement. Il est important de se rappeler qu'un objet Complex
ne peut pas implicitement faire une copie de lui-même, donc matrix_list
a effectivement beaucoup d'objets identiques (pointeurs vers un objet en mémoire) donc si vous modifiez l'objet en place, il changera partout.
Un autre conseil - essayez d'utiliser le __init__
de Complex
de manière significative. Vous pouvez changer ce genre de chose:
def __sub__(self,complex_object):
difference=Complex(0,0)
difference.real=self.real-complex_object.real
difference.imag=self.imag-complex_object.imag
return difference
à ceci:
def __sub__(self, other):
return Complex(self.real - other.real,
self.imag - other.imag)
Ce qui est plus concis, ne pas utiliser initialisations temporaires ou variables, et je trouve plus facile à lire. Il peut également vous être utile d'ajouter une sorte de méthode .copy()
à Complex
, ce qui renvoie un nouvel objet Complex
avec les mêmes valeurs.
Sur vos méthodes pour la représentation sous forme de chaîne - Je recommanderais d'afficher les valeurs réelles et imaginaires sous la forme float
s, et non des entiers, car ils doivent être des nombres réels. Ici, je les ai arrondi à 2 décimales:
def __repr__(self):
return "%.2f+j%.2f" %(self.real,self.imag)
Notez également que vous devriez vraiment pas besoin __str__
si elle doit faire la même chose que __repr__
. En outre, show
semble faire à peu près la même chose, encore une fois.
En outre, en Python, il n'y a pas de variables privées, donc au lieu de getReal
il est tout à fait possible de simplement y accéder par .real
. Si vous avez vraiment besoin de méthodes getter/setter, regardez @property
. Comme vous êtes déjà en train de faire une surcharge, je vous recommande également d'implémenter addValue
dans __getitem__
, ce qui me semble être un bon ajustement d'index sous le modèle de données de Python. Si vous faites ceci:
def __setitem__(self, inds, value):
i, j = inds
self.matrix_list[i][j] = value
Vous pouvez changer le addValue
en test.py
à ceci:
m1[1, 1] = C2
S'il vous plaît ne font pas référence au code externe dans les questions (il se les fermé), poster plutôt un travail minimum exemple ici. –