python __getitem__ 重载问题

0 投票
2 回答
1413 浏览
提问于 2025-04-17 10:16

我正在尝试在这里实现一个插入功能。这个 Matrix 类是 Grid 类的子类,但似乎遇到了一些问题。我不太明白我哪里做错了。

错误信息显示:“Grid[m][n] = value TypeError: 'type' object is not subscriptable。”

请帮帮我。

谢谢!

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 个回答

2

类不能像数组那样直接访问,只能通过对象来访问。Grid[m][n] = value 这行代码需要改成 self[m][n] = value,因为 Grid 是一个类,而不是一个对象,所以你需要用 self。所有的方法都会把当前的实例作为第一个参数传进去(顺便说一下,'self' 这个词其实没什么特别的,你可以叫它 'current_instance' 或者其他任何名字)。如果你想知道为什么说 Grid 是一个 '类型' 对象,可以看看这个问题的第一个回答:关于元类的讨论

4

你正在访问 Grid,在这里你想找到某个对象。把 Grid[m][n] = value 改成 self[m][n] = value

撰写回答