如何编写可修改初始化坐标值的Python函数?现有代码未达预期
问题解决:无法修改Move对象的坐标值
你的代码无法达到预期效果,核心原因是:Python中整数属于不可变类型,传递move.x给函数时,传递的是该数值的副本,函数内修改局部变量axis不会影响原对象的x属性。
修复方案
直接传递Move对象和要修改的轴名称,通过getattr和setattr操作对象属性,这样能真正修改原对象的坐标值:
class Move: def __init__(self, x, y): self.x = x self.y = y move = Move(5, 5) def obstacle(obj, axis_name, value, plus): current_val = getattr(obj, axis_name) if current_val == value: delta = 1 if plus else -1 setattr(obj, axis_name, current_val + delta) print(f"x = {move.x}, y = {move.y}") obstacle(move, 'x', 5, False)
执行这段代码后,会输出x = 4, y = 5,符合你的预期。
简化写法(仅针对x轴)
如果只需要支持x轴的修改,也可以用更直白的方式实现:
class Move: def __init__(self, x, y): self.x = x self.y = y move = Move(5, 5) def obstacle(obj, value, plus): if obj.x == value: obj.x = obj.x + 1 if plus else obj.x - 1 print(f"x = {obj.x}, y = {obj.y}") obstacle(move, 5, False)
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

