You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

矩阵实现作业代码报错“Object not callable”求助

排查MyMatrix类中的"Object not callable"错误及修复方案

错误根源分析

你的代码在__init__方法里执行了self.t(),这要求传入的第三个参数t必须是一个可调用对象(比如函数、lambda表达式、类构造器等)。如果实例化时你传入的t是像整数、字符串这类不可调用的值(比如MyMatrix(2,2,0)),Python就会抛出Object not callable异常——因为你试图把一个非函数的对象当成函数来调用。

另外,你的代码还有几个潜在的小问题,我也一起帮你指出来:

  • 内层循环和外层循环用了同一个变量名i,会导致外层的循环变量被覆盖,逻辑可能出错;
  • get方法没有返回值,调用它拿不到矩阵元素;
  • __str__方法没有写完,无法正确打印矩阵内容。

修复方案

1. 确保实例化时传入可调用的t

比如你想初始化一个全0矩阵,可以用lambda函数作为t参数:

# 正确实例化:传入lambda生成0
mat = MyMatrix(2, 3, lambda: 0)

或者自定义一个生成函数:

def generate_default():
    return 1  # 返回你想要的默认值
mat = MyMatrix(2, 3, generate_default)

2. 修复代码中的其他问题

这里是修复后的完整代码:

class MyMatrix(object):
    def __init__(self, n, m, t):
        self.n = n
        self.m = m
        self.t = t
        self.data = []
        for i in range(self.n):
            row = []
            # 把内层循环变量改成j,避免覆盖外层的i
            for j in range(self.m):
                row.append(self.t())
            self.data.append(row)
    
    def set(self, i, j, v):
        self.data[i][j] = v
    
    def get(self, i, j):
        # 添加返回值,让方法能返回指定位置的元素
        return self.data[i][j]
    
    def __str__(self):
        # 补全打印逻辑,让矩阵输出更友好
        header = f"{self.__class__.__name__}({self.n}, {self.m})"
        # 把每一行转成字符串并缩进
        row_strings = ["\t" + str(row) for row in self.data]
        # 拼接表头和所有行
        return "\n".join([header] + row_strings)

3. 测试修复后的代码

# 实例化一个2行3列、默认值为1的矩阵
mat = MyMatrix(2, 3, lambda: 1)
print(mat)
# 输出:
# MyMatrix(2, 3)
# 	[1, 1, 1]
# 	[1, 1, 1]

# 修改并获取元素
mat.set(0, 0, 99)
print(mat.get(0, 0))  # 输出99

内容的提问来源于stack exchange,提问作者Kayla Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:09:39