2017-04-18 80 views
0

我试图创建一个函数来提高max hp,只要stat增加或减少。我试图改变self.maxHpCalc()播放器。**将变量=(int)移动到任何为什么我可以想到并且一直没有运气的orc类中。取决于我如何改变它我得到自己/球员没有属性的力量,maxHp或maxHpCalc没有定义。在python中使用基于文本的游戏的类

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) 

一切我改变给我的播放器/自无属性力量的时刻

+0

我已阅读过这篇文章,但我很努力地想看到一个问题。你只是寻找一些保证,你做对了吗? –

+0

哈哈是的,顶部。或多或少,我只是在跟自己说话。如果看起来没错的话就忽略它。主要是我在最后遇到了所有def函数的问题。因为我希望他们是一个不断变化的变量,这取决于统计数据是什么。所以我遇到像“玩家没有属性upperStrength”或maxHPCalc未定义的错误。至于现在我有一个raiseStat()函数,并有maxHp =(公式),并且工作,但从我所看到的应该有一种方法将该函数放入类maxHp = maxHpCalc()我还没有找到了一种方法来使其工作。 – Reederboard

+0

你有没有尝试用一个缩进这些函数,所以它们属于这个类的范围?在这里你永远无法确定这些缩进错误不是将代码粘贴到文本框中的结果,也不是原始海报代码中的真正错误。 –

回答

0

下面是一些固定的代码,用小的驱动程序行使类。

请注意以下更改

  1. 功能maxHpCalc应该是一个结合的方法,如果是包含在一个player实例数据进行操作。因此它应该有一个self参数,并应参考该自引用的strengthdefense
  2. 致电_maxHpCalc时,应参考self。我使它成为一种绑定方法,它需要一个实例来处理。我添加了一个下划线来表示它是一个私有方法。
  3. 你应该叫maxHpCalc设置的strengthdefense值之后,否则,他们不会在函数被调用的时候定义。
  4. player.maxHp是没有意义的。 player是一类,没有静态 属性maxHp,您需要一个实例来访问该属性。我创建了一个实例并引用它。

代码:

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) 

我也有问,为什么有一个构造函数的参数maxHp如果你不使用它,但是从其他参数计算呢?

+0

加下划线似乎是我的主要问题。我甚至不知道这是你可以添加的东西。删除它给出相同的错误,以便修复它可行。只要maxHp = 1,它就没有真正的目的。这几天我一直在搞这样的事情,并且把自己弄糊涂了。因为我无法让功能工作,所以我蛮横强迫它在一个不同的功能里面,只是为了勉强我的公式,并继续在没有崩溃的情况下 也打印语句给出了9和7?还有什么是兽人(1,2,3,4)的? – Reederboard

+0

@Reederboard下划线对程序没有任何影响,只要它在函数定义和使用时存在或不存在即可。这只是一个惯例。 –

+0

如果删除了下划线,它将失败:self.maxHp = self.maxHpCalc() AttributeError:'player'对象没有属性'maxHpCalc' – Reederboard