Python函数更新对象问题:求解Score对象未正确更新的原因
问题分析与解决
你的代码无法更新原对象的核心问题是:你只读取了solver对象的分数值,修改的是局部变量solver_p,根本没对原solver对象执行任何更新操作。
solver_p = int(solver.get_score_at(g, phase))这行代码只是把get_score_at返回的分数值复制到了局部变量solver_p里,后续对solver_p的加减操作只会改变这个局部变量,和solver内部存储的分数数据没有任何关联,自然无法更新原对象。
修复方案
步骤1:确认并调用Solver类的分数修改方法
首先你需要确认Solver类是否提供了修改分数的方法(比如set_score_at这类命名的方法)。如果有,直接在函数里调用它来更新原对象:
def Updating(solver : Solver, g: Goal, phase: Phase, a: int): current_score = int(solver.get_score_at(g, phase)) if a == 0: current_score += 1 # 调用Solver类的设置方法,把新分数写入原对象 solver.set_score_at(g, phase, current_score) # 可选:如果需要返回更新后的分数,可以保留return return current_score
步骤2:如果Solver类没有修改方法,需要自己实现
如果Solver类原本没有提供修改分数的方法,你需要在Solver类中添加对应的设置逻辑。假设Solver内部用字典存储分数,示例如下:
class Solver: def __init__(self): # 用(g, phase)元组作为键存储对应分数 self._score_storage = {} def get_score_at(self, g: Goal, phase: Phase): # 不存在时返回0作为默认值 return self._score_storage.get((g, phase), 0) def set_score_at(self, g: Goal, phase: Phase, new_score: int): # 更新对应位置的分数 self._score_storage[(g, phase)] = new_score
内容的提问来源于stack exchange,提问作者Polo4120
相关产品推荐
相关产品推荐

