矩阵实现作业代码报错“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
相关产品推荐
相关产品推荐

