2012-01-15 7 views
0

Я пытаюсь реализовать функцию вставки здесь. Ну, для этого класса Matrix, который является дочерним классом Grid, похоже, проблема. Но я не совсем понимаю, что я делаю неправильно здесь. Ошибка говорит: «Grid [m] [n] = значение TypeError: объект« type »не подлежит расшифровке».python __getitem__ проблема перегрузки

Пожалуйста, помогите

благодаря

from Grid import Grid 

class Matrix(Grid): 
    def __init__(self, m, n, value=None): 
##  super(Matrix, self).__init__(m, n) 
     Grid.__init__(self, m, n) 

    def insert(self, m, n, value=None): 
     Grid[m][n] = value 

здесь Сетка класс

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 
+0

Почему вы прокомментировали вызов 'super' и заменили его прямым вызовом' Grid'? «Супер» был прав. И, пожалуйста, примите некоторые ответы на предыдущие вопросы. –

+0

Я думаю, что супер-вызов и сетка .__ init__ - это то же самое. поэтому. Пожалуйста, поправьте меня, если я ошибаюсь. – user1047092

ответ

4

Вы получаете доступ к классGrid где вы ищете объект. Изменить Grid[m][n] = value на self[m][n] = value.

2

Классы не могут быть доступны как массивы, просто объекты. Grid[m][n] = value должен быть заменен на self[m][n] = value, потому что Grid - это класс, а не объект, поэтому вы используете self, поскольку все методы передаются текущим экземпляром в качестве первого параметра (к слову, слово «я» действительно не имеет значения, вы мог бы назвать это «current_instance» или что-нибудь еще, если вы захотите). Если вам интересно, почему он говорит, что Grid является объектом типа, проверьте первый ответ на this question.

+0

Спасибо за вашу большую помощь! – user1047092

Смежные вопросы