我正在编写一款游戏,我有两个变量:
strength = 10
hp = 50 + (strength * 5)
我能够构建一个允许我更新strength
变量以及其他属性的系统,但我假设hp
会在我更新strength
时更新,这不是情况。
strength += skilladdnum
print("you now have", strength, "strength!")
strength
更新时,hp
是否有办法更新?
在语言层面上,没有办法以某种方式自然地"联系在一起";两个变量,如果你想的话,其中一个会在每次更新时自动更新。
正确的方法是指定一个"setter"函数,你会调用它来更新强度它也会更新hp。比如你可以输入
def set_strength(new_strength):
return new_strength, 50 + (new_strength * 5)
strength, hp = set_strength(strength + skilladdnum)
,但这有点难看,感觉不习惯。一旦你进入类和面向对象编程,那么你将有例如类Character
,它将有字段(变量)hp
和strength
,从这样的类的外部,你将只使用像set_strength
和Character
类内部的函数,你会注意在所有地方正确地更新它们。
HP将放在一个函数中,您可以在需要它的值时调用它:
strength = 50
def hp():
return 50 + (strength * 5)
如果在类中使用,你可以使用属性装饰器从字符中获取值:也就是character。力量,character.hp。它看起来很像:
class Hero:
def __init__(self, strength):
self.strength = strength
@property
def hp(self):
return 50 + (self.strength * 5)
如果我理解正确,您希望hp
在strength
更新时更改,公式为hp = 50 + (strength * 5)
然而,当您第一次在hp = 50 + (strength * 5)
行中赋值hp
时,您正在将变量hp
初始化为上述公式在给定状态下的结果。赋值后,hp
不以任何方式与strength
绑定。
因此,您应该在每次更新strength
时更新hp
。
你可以用一种"python"的方式来完成,用一个函数将两者一起更新,使其在主代码中成为一行,并且更干净。这也可以通过lambda或property
以更高级的方式完成。