Python3类中重写函数报错:'int'对象不可下标访问,求解答
解决Python类方法改写时的'int' object is not subscriptable错误
嗨,这个问题我刚学类的时候也踩过一模一样的坑!'int' object is not subscriptable本质就是你试图用下标(比如[0]或者[0][2])去访问一个整数变量,而整数根本没有下标属性,自然就报错了。
结合你说的原函数正常、改类后出错的情况,大概率是类的实例变量初始化或者方法调用时的变量混淆,我给你拆解下常见的错误场景和修复方案:
先看原函数的正常逻辑(模拟你的场景)
假设你的原函数大概是这样的,能正常输出目标矩阵:
def get_cost_matrix(): # 初始化一个3行4列的全0矩阵 cost = [[0]*4 for _ in range(3)] # 填充矩阵数值 cost[0][2] = 3200 cost[0][3] = 8600 cost[1][0] = 1200 cost[1][1] = 1200 cost[1][3] = 3200 cost[2][0] = 2400 cost[2][1] = 2400 cost[2][2] = 1200 return cost print(get_cost_matrix()) # 输出:[[0, 0, 3200, 8600], [1200, 1200, 0, 3200], [2400, 2400, 1200, 0]]
你可能犯的错误:初始化实例变量成了整数
很多人刚写类的时候,会把实例变量误初始化为整数,比如这样:
class CostMatrix: def __init__(self): self.cost = 0 # 这里错了!应该初始化列表,不是整数 def calculate_matrix(self): # 这里试图给整数self.cost用下标赋值,直接触发错误 self.cost[0][2] = 3200 self.cost[0][3] = 8600 # ... 后续填充逻辑 return self.cost cm = CostMatrix() cm.calculate_matrix() # 报错:'int' object is not subscriptable
正确的改写方式
只需要把类初始化时的self.cost改成和原函数一样的全0矩阵即可:
class CostMatrix: def __init__(self): # 初始化3行4列的全0矩阵,和原逻辑一致 self.cost = [[0]*4 for _ in range(3)] def calculate_matrix(self): # 填充矩阵的逻辑完全复用原函数的代码 self.cost[0][2] = 3200 self.cost[0][3] = 8600 self.cost[1][0] = 1200 self.cost[1][1] = 1200 self.cost[1][3] = 3200 self.cost[2][0] = 2400 self.cost[2][1] = 2400 self.cost[2][2] = 1200 return self.cost # 调用测试 cm = CostMatrix() result = cm.calculate_matrix() print(result) # 输出:[[0, 0, 3200, 8600], [1200, 1200, 0, 3200], [2400, 2400, 1200, 0]]
其他可能的坑点
如果上面的修复没用,可以检查这两个地方:
- 方法内部是否不小心把
self.cost重新赋值成了整数(比如写了self.cost = 0或者self.cost = some_number) - 是否在调用方法时,把类实例的属性和局部变量搞混了(比如方法里用了局部变量
cost而不是self.cost)
内容的提问来源于stack exchange,提问作者virtualdvid
相关产品推荐
相关产品推荐

