2012-01-15 11 views
1

Matrixの加算機能を実装しようとしています。 (つまり2つの行列を追加する) 2つの行列を追加できるように加算関数をオーバーロードすることでこれを行います。 このMatrixクラスでは、実装するGridクラスを継承しました。python +演算子オーバーロード問題

ここでは__add__方法に問題があるようですが、それを分かりやすくすることができます。エラーはAttributeError: 'Matrix' Object has no attibute '_data'と表示されます。

ここに私のコードです。誰でも助けてくれますか?または説明する?

おかげ

from Grid import Grid 

class Matrix(Grid): 
    def __init__(self, m, n, value=None): 
     self.matrix = Grid(m, n) 
     self.row = m 
     self.col = n 
    def insert(self, row, col, value): 
     self.matrix[row][col] = value 
     print self.matrix 
    def __add__(self, other): 
     if self.row != other.row and self.column != other.column: 
      print " Matrixs are not indentical." 
     else: 
      for row in xrange(self.row): 
       for col in xrange(self.col): 
        self.matrix[row][col] = self.matrix[row][col] + other[row][col] 
     return self.matrix 

は、ここで私は継承されたグリッドクラスです。

from CArray import Array 

class Grid(object): 
    """Represents a two-dimensional array.""" 
    def __init__(self, rows, columns, fillValue = None): 
     self._data = Array(rows) 
     for row in xrange(rows): 
      self._data[row] = Array(columns, fillValue) 
    def getHeight(self): 
     """Returns the number of rows.""" 
     return len(self._data) 
    def getWidth(self): 
     "Returns the number of columns.""" 
     return len(self._data[0]) 
    def __getitem__(self, index): 
     """Supports two-dimensional indexing 
     with [row][column].""" 
     return self._data[index] 
    def __str__(self): 
     """Returns a string representation of the grid.""" 
     result = "" 
     for row in xrange(self.getHeight()): 
      for col in xrange(self.getWidth()): 
       result += str(self._data[row][col]) + " " 
      result += "\n" 
     return result 

答えて

3

あなたはあなたの子供__init__から親の__init__を呼び出す必要があります。 Matrix.__init__にこれを追加します。

super(Matrix, self).__init__(m, n, fillValue=value) 
+0

を私はマトリックス__init__にコードを追加する必要がありますか?これはあなたが意味することですか? – user1047092

+0

@ user1047092、はい。それは 'Grid .__ init__'を呼び出します。 –

+0

。コードを追加してa = Matrix(2,3)を試した後。 Type Error:__init __()は最大4つの引数をとります。私は何が間違っているのか分かりません。 – user1047092

7

あなたは、_dataは、あなたのクラスで定義されていないため、継承されたクラスのコンストラクタを呼び出し、しませんでした。マトリックス中に、次ののinit追加してみてください:

super(Matrix, self).__init__(m, n, fillValue=value) 
+0

助けてくれてありがとう! – user1047092

関連する問題