python __getitem__ 重载问题
我正在尝试在这里实现一个插入功能。这个 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
。