python - 在 Python 中编写自定义矩阵类,__setitem__ 问题

标签 python python-3.x

我正在开发一个自定义类来使用 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__() takes exactly 4 arguments (3 given)

最佳答案

错误信息说明了一切:

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

你的 __setitem__ 需要 4(self 被自动传递,像往常一样):

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

但是这一行:

M[0, 0] = 5.0

不将 0、0 和 5.0 传递给 __setitem__;它将二元组 (0, 0) 和 float 5.0 传递给 __setitem__。这在 this section 中讨论Python 文档,其中调用模式是 object.__setitem__(self, key, value)

你需要更多类似的东西

def __setitem__(self, index, value):
    self.values[index[0]][index[1]] = value

关于python - 在 Python 中编写自定义矩阵类,__setitem__ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16248012/

相关文章:

python - 发送和接收 SNMP 陷阱并为 NAS 设备创建 MIB 文件

python - 在 Python 字符串文字中引用反斜杠

python-3.x - 用python检测操作系统

python - 如何在 Google App Engine 上安装 'python3-dev' 以使用 'pymatting_aot.aot'

python - Python 3 源文件支持哪些文件编码?

python - 可以在 VSCode 中获得 pycharm 风格的 "run with Python Console"功能吗?

python - 如何保存棋盘游戏? Python

python - 如何计算 odoo 13 销售订单行上的字段?

python - 在 OSX 中为 python3 安装 opencv3

python - 属性错误: 'Employee' object has no attribute 'WorkingHours'