i'm trying to create a function to raise max hp whenever a stat is increased or decreased. i have tried changing self.maxHpCalc() player.** moving the variables = (int) into the orc class in every why i can think of and have been having no luck. depending on how i change it i get self/player have no attribute strength, maxHp or maxHpCalc is not defined.
class player: def __init__(self, hp = 1 , maxHp = 1, strength = 4, defense = 5): self.hp = hp self.maxHp = maxHpCalc() self.strength = strength self.defense = defense def maxHpCalc(): player.maxHp = player.strength + player.defense class orc(player): def __init__(self, hp, maxHp, strength , defnese): super().__init__(hp, maxHp, strength, defense) print(player.maxHp)
everything i change give me player/self has no attribute strength at the momentAnswer1:
Here's some fixed code, with a small driver program to exercise the classes.
Note the following changes<ol><li>The function
maxHpCalcshould be a bound method, if it is to operate on data contained in a
playerinstance. Therefore it should have a
selfparameter and should reference
defensefrom that self reference.</li> <li>When calling
_maxHpCalcyou should reference
self. I made it a bound method and it needs an instance to work on. I added an underscore to indicate it's a private method.</li> <li>You should call
maxHpCalc<strong>after</strong> setting the values of
defense, otherwise they are not defined at the point the function is called.</li> <li>
player.maxHpmakes no sense.
playeris a class and has no static property
maxHp, you need an instance to access that property. I create an instance and reference that.</li> </ol>
class player: def __init__(self, hp=1, maxHp=1, strength=4, defense=5): self.hp = hp self.strength = strength self.defense = defense self.maxHp = self._maxHpCalc() def _maxHpCalc(self): return self.strength + self.defense class orc(player): def __init__(self, hp, maxHp, strength , defense): super().__init__(hp, maxHp, strength, defense) p = player() o = orc(1,2,3,4) print(p.maxHp) print(o.maxHp)
I also have to ask, why include a constructor parameter
maxHp if you don't use it but calculate it from other parameters?