2016-11-14 7 views
-1

CODE:二つのオブジェクト

class matrix(): 

    row=0 
    colum=0 
    def __init__(self,x,y): 
    self.m=[] 
     self.row=x 
     self.colum=y 
     #Makes a empty matrix of size x*y 
     for i in range(self.row): 
      self.m.append([]) 
      for j in range(self.colum): 
       self.m[i].append(int(raw_input("Enter element"))) 
#To diplay the matrix 
def display(x): 
    k=x.m 
    for i in range(0,x.row): 
      for j in range(0,x.colum): 
       k[i][j]=x.m[i][j] 
    return k 
row1=int(raw_input("Enter Number of rows of 1st Matrix")) 
colum1=int(raw_input("Enter Number of colume of 1st Martrix")) 
matrix1=matrix(row1,colum1) 
print "1st Matrix:",display(matrix1) # displaying the first matix before adding elements 
row2=int(raw_input("Enter Number of rows of 2nd Matrix")) 
colum2=int(raw_input("Enter Number of colume of 2nd Martrix")) 
matrix2=matrix(row2,colum2) 
print "Matrix 2:",display(matrix2) #displaying the second matrix before adding elements 

出力:私のpython 2.7に次のコードを書かれているし、私が起こることを期待するもの

Enter Number of rows of 1st Matrix2 
Enter Number of colume of 1st Martrix2 
Enter element11 
Enter element22 
Enter element33 
Enter element44 
1st Matrix: [[11, 22], [33, 44]] 
Enter Number of rows of 2nd Matrix2 
Enter Number of colume of 2nd Martrix3 
Enter element1 
Enter element2 
Enter element3 
Enter element4 
Enter element5 
Enter element6 
Matrix 2: [[11, 22, 1, 2, 3], [33, 44, 4, 5, 6], [], []] 

は、作成することです。クラス行列のコンストラクタを使用して与えられたサイズの2つのmatix。 出力に示すように、オブジェクト、すなわち行列1と行列2の両方が同じリストmを共有する。これをデフォルトで保存するために2つのリストをseprateするべきではありません。 期待マトリックス2は、クラス自体にdef display機能を移動することができ

[[1,2,3],[4,5,6]] 
+2

クラスが作成されるときに 'm'リストを初期化するためです。それを__init__に移動してください。 – Alex

+0

@Alex Thanksそれを解決しました。しかし、なぜ私は何をしましたか? –

+0

mリストはクラスにリンクされていますが、インスタンスにはリンクされていません。したがって、クラス行列のすべてのインスタンスがそれを共有します。 __init__に入れると、インスタンスが作成されるたびに新しいリストが作成されます。それが違いです。 – Alex

答えて

1

です。これは、matrixオブジェクトから呼び出す方法(matrix1.display())になります。変数m,row、およびcolumnは現在、matrixオブジェクト内に保存されていません。以下のコードを試してみてください。

class matrix(object): 
    def __init__(self,x,y): 
     self.m = [] 
     self.row = x 
     self.colum = y 
     #Makes a empty matrix of size x*y 
     for i in range(self.row): 
      self.m.append([]) 
      for j in range(self.colum): 
       self.m[i].append(int(raw_input("Enter element ({},{}): ".format(i,j)))) 

    #To diplay the matrix 
    def display(self): 
     for r in self.m: 
      print(r) 


>>> matrix1 = matrix(2,2) 
Enter element (0, 0): 11 
Enter element (0, 1): 22 
Enter element (1, 0): 33 
Enter element (1, 1): 44 

>>> matrix1.display() 
[11, 22] 
[33, 44]