4

我正在开发一个自定义类来使用 Python 处理矩阵。我遇到了一个问题,我的测试程序显然没有向我的setitem方法传递足够的参数。这是代码:

def __setitem__(self, rowIndex, colIndex, newVal):
    self.values[rowIndex][colIndex] = newVal

以及引发错误的测试代码:

M[0, 0] = 5.0;   M[0, 1] = 7.0;   M[0, 2] = -2.0;
M[1, 0] = 3.0;   M[1, 1] = 6.0;   M[1, 2] = 1.0;

M在尝试设置项目之前调用 Matrix 的init 。

我收到了这个错误: TypeError: setitem () 需要 4 个参数(3 个给定) 谢谢!

4

1 回答 1

11

错误消息说明了一切:

TypeError: __setitem__() takes exactly 4 arguments (3 given)

__setitem__需要 4 (像往常一样自动传递自我):

def __setitem__(self, rowIndex, colIndex, newVal):

但是这一行:

M[0, 0] = 5.0

不会将 0、0 和 5.0 传递给__setitem__; 它将 2 元组(0, 0)和浮点数5.0传递给__setitem__. 这在 Python 文档的这一部分中进行了讨论,其中调用模式为object.__setitem__(self, key, value).

你需要更多类似的东西

def __setitem__(self, index, value):
    self.values[index[0]][index[1]] = value
于 2013-04-27T03:30:00.207 回答