Python类实例方法调用时实参错传至self 如何正确传值给目标参数T
问题根因
你遇到的参数绑定错位是两个独立问题共同导致的:
- 调用方式错误:Python的实例方法(第一个参数固定为self的方法)不能直接通过类名调用,直接用
Player.AddPiecesInSupply(0)时,传入的0会被强制绑定到第一个形参self上,自然就传不到目标参数T。 - 方法逻辑完全无效:你当前写的
AddPiecesInSupply没有对实例的_PiecesInSupply属性做任何修改:modify = T+1生成的是仅在方法内生效的局部变量,modify.T属于无意义的错误操作(整数对象没有.T属性,运行到这行会直接抛出AttributeError),最终返回的还是传入的原始参数T,就算调用方式正确,也达不到修改属性的目的。
调整方案
1. 修正方法的核心逻辑
把AddPiecesInSupply方法的逻辑替换为真正操作实例_PiecesInSupply属性的代码,顺便把原来模糊的形参名T改成有明确语义的名称,避免逻辑混淆:
def AddPiecesInSupply(self, add_num): # 将传入的增量值累加到实例的零件库存属性上 self._PiecesInSupply += add_num # 可选择返回更新后的属性值,方便调用侧获取最新状态 return self._PiecesInSupply
所有修改必须通过self.前缀操作对应的实例属性,才能真正实现修改效果,不要在方法内生成和实例属性无关的局部变量。
2. 修正方法的调用流程
实例方法必须绑定具体的类实例才能调用,正确流程是:
- 第一步:先创建Player类的实例,初始化时传入符合构造函数要求的参数
示例:player1 = Player("测试玩家", 10, 5, 3, 2),这里最后传入的2是初始的_PiecesInSupply值 - 第二步:通过实例调用方法,此时self会自动绑定到player1实例上,你传入的数值会正确对应到目标形参add_num
示例:player1.AddPiecesInSupply(0),调用后就会把player1的_PiecesInSupply值在原有基础上加0,返回更新后的数值。
注意:单下划线开头的
_PiecesInSupply是Python约定的受保护属性,不建议在类外部直接通过实例._PiecesInSupply = xxx的方式修改,通过专门编写的方法修改是符合封装约定的做法。
内容的提问来源于stack exchange,提问作者Katie010203
相关产品推荐
相关产品推荐

