2016-09-24 5 views
-1

Ich habe eine Matrix Klasse:Wie tippe ich eine Liste als eigene benutzerdefinierte Matrix-Klasse?

class Matrix(object): 
    def __init__(self,row,col): 
     self.row=row 
     self.col=col 
     self.matlist=[] 
     self.create() 
    def create(self): 
     for i in range(self.row): 
      rowlist=[] 
      for j in range(self.col): 
       element=input("Enter Row: {} Col: {} : ".format(i+1,j+1)) 
       rowlist.append(element) 
      self.matlist.append(rowlist) 

    def __str__(self): 
     j=str() 
     for i in range(len(self.matlist)): 
      for j in range(len(self.matlist[i])): 
       j+=str(self.matlist[i][j])+" " 
      j+="\n" 
     return j 

    def __add__(self,y): 
     newmatrix=[] 
     el1=self.matlist 
     el2=y.matlist 

     if (len(el1)==len(el2)) and (len(el1[0])==len(el2[0])): 
      for i in range(len(el1)): 
       newlist=[] 
       for j in range(len(el1[i])): 
        m=el1[i][j]+el2[i][j] 
        newlist.append(m) 
       newmatrix.append(newlist) 
      return newmatrix 

und ich habe zwei Matrix-Objekte erstellt:

m=Matrix(2,2) 
n=Matrix(2,2) 

und dann füge ich die Matrices:

k=m+n 

, die ruft das __add__() Verfahren die gibt eine list zurück. Aber ich möchte es als Matrix Objekt zurückgeben, so dass, wenn ich versuche, es zu drucken, die __str__() Methode aufgerufen wird und die list Dosent einfach gedruckt werden. Gibt es eine Möglichkeit, das list in Matrix einzugeben?

+3

Wenn Sie eine Matrix wollen, warum erhalten Sie nicht die Methode, um eine zurückzugeben? –

+0

Warum erstellen Sie nicht einfach eine zusätzliche Konstruktormethode, die eine neue Matrix aus einer Eingabeliste erstellt und sie als Rückgabewert der Methode __add__ verwendet? – AArias

+0

@AArias Wie schlage ich vor, dass ich einen zusätzlichen Konstruktor erstelle? –

Antwort

0

So etwas sollte funktionieren.

Zuerst wird eine Class eine Matrix aus einer Liste zu erstellen:

class Matrix(object): 
    def __init__(self, row=None, col=None): 
     self.matlist = [] 
     if row and col: 
      self.row = row 
      self.col = col 
      self.create() 

    @classmethod 
    def fromlist(cls, list): 
     res = Matrix() 
     for row in list: 
      res.matlist.append(row) 
     return res 

Dann wird die __add__ Methode verwendet das Verfahren einen Matrix zurückzukehren:

def __add__(self,y): 
    newmatrix=[] 
    el1=self.matlist 
    el2=y.matlist 

    if (len(el1)==len(el2)) and (len(el1[0])==len(el2[0])): 
     for i in range(len(el1)): 
      newlist=[] 
      for j in range(len(el1[i])): 
       m=el1[i][j]+el2[i][j] 
       newlist.append(m) 
      newmatrix.append(newlist) 
     return Matrix.fromlist(newmatrix) 

Beachten Sie, dass es einige Kontrollen sind Sie sollte tun. Dieser Code prüft beispielsweise nicht, ob alle Zeilen die gleiche Größe haben. Andere Überprüfung, die Sie nicht in Ihrem Code berücksichtigen, ist, dass beim Hinzufügen von zwei Matrix Objekt, sollten beide die gleiche Größe sein.

Verwandte Themen