2016-09-24 9 views
-1

私はMatrixクラスがあります。リストを自分のカスタムMatrixクラスとして型変換する方法は?

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 

をし、私は2つの行列オブジェクトを作成しました:

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

をしてから、私は行列を追加します。

__add__()メソッドを呼び出します
k=m+n 

listを返します。しかし、それをMatrixオブジェクトとして返すようにして、印刷しようとすると__str__()メソッドが呼び出され、listが表示されます。 listMatrixに型キャストする方法はありますか?

+3

マトリックスが必要な場合、そのメソッドを返すのはなぜですか? –

+0

入力リストから新しい行列を作成する追加のコンストラクタメソッドを作成し、それを__add__メソッドの戻り値として使用するだけではどうですか。 – AArias

+0

@AArias私は追加コンストラクタを作成する方法を提案しますか? –

答えて

0

何かこれはうまくいくはずです。

まず、リストから行列を作成するためのクラスメソッド:次に

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 

__add__方法が使用するには、メソッドがMatrixを返すように言った:

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) 

注いくつかのチェックは、あなたがあることすべきだ。たとえば、このコードでは、すべての行が同じサイズであることはチェックされません。あなたのコードで考慮しなかった他のチェックは、2つのオブジェクトを追加するときには同じサイズでなければなりません。

関連する問題