python __getitem__重载问题

时间:2012-01-15 07:05:41

标签: python

我正在尝试在这里实现插入功能。那么,对于这个类Grid的子类,似乎有问题。但我不太明白我在这里做错了什么。 错误显示“Grid [m] [n] = value TypeError:'type'对象不可订阅。”

请帮忙

感谢

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

这是Grid类

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

2 个答案:

答案 0 :(得分:4)

您正在访问正在寻找对象的 Grid。将Grid[m][n] = value更改为self[m][n] = value

答案 1 :(得分:2)

无法像数组一样访问类,只能访问对象。 Grid[m][n] = value必须替换为self[m][n] = value,因为Grid是类,而不是对象,因此您使用self,因为所有方法都将当前实例作为第一个参数传递(顺便说一下,'self'这个词“真的没关系,如果你愿意,你可以称之为'current_instance'或其他任何东西。”如果您想知道为什么Grid表示Grid是'type'对象,请查看this question的第一个答案。