Python OOP:如何通过一个对象的方法修改另一个对象的属性?
问题解决:Character类攻击功能异常输出None
问题根源
你的代码存在几处关键问题:
punch方法设计不符合面向对象逻辑:当前仅接收数值返回计算结果,未直接作用于目标对象,若实际代码存在笔误(比如漏写return),会直接返回None。- 直接修改对象属性违背封装原则:你直接赋值
char2.health,既没利用已有的set_health方法,也无法统一处理生命值边界(比如防止生命值为负)。 - 额外提醒:
range是Python内置函数,用它做属性名虽不报错,但易引发混淆,建议改名(比如attack_range)。
修复后的代码
重构Character类
class Character: def __init__(self, health, power, attack_range, position): self.health = health self.power = power self.attack_range = attack_range # 替换原range属性 self.position = position def get_health(self): return self.health def set_health(self, value): # 简化生命值修改逻辑,同时限制最小值为0 self.health -= value if self.health < 0: self.health = 0 def punch(self, target): # 直接让攻击作用于目标对象,调用目标的set_health方法 target.set_health(self.power)
正确使用方式
from character import Character char1 = Character(100, 25, 5, 3) char2 = Character(100, 20, 3, 4) # char1发起攻击,传入目标char2 char1.punch(char2) print(char2.get_health()) # 输出:75
原代码为何可能输出None
如果你的代码和贴出的完全一致,理论上应输出75,但出现None大概率是实际代码存在笔误:
punch方法漏写return value语句,函数默认返回None。get_health方法漏写return self.health,导致传入punch的是None,最终计算后仍返回None。
内容的提问来源于stack exchange,提问作者amoez200
相关产品推荐
相关产品推荐

