两个类和一个方法的3个实例的操作数不受支持?

2024-09-27 00:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让程序从enemyUnit获取hp属性,从unit获取攻击属性,从tackle获取伤害属性,并将它们放到方法getHit()中的一个数学问题中。代码如下:

class Pokemon(object):    
    def __init__(self,hp,attack,defence):
        self.hp = hp
        self.attack = attack
        self.defence = defence
    def getHit(self,damage,hp,attack):
        self.hp -= damage * self.attack/self.defence
        print str(self.hp)

class Move(object):
    def __init__(self,damage):
        self.damage = damage


unit = Pokemon(10,2,3)
enemyUnit = Pokemon(4,2,3)
tackle = Move(3)


enemyUnit.getHit(enemyUnit,tackle,unit)

不幸的是,它给了我一个错误

unsupported operand type(s) for *: 'Pokemon' and 'int'

如何从每个类的所有实例中获取所有变量并将它们放入一个函数中?你知道吗


Tags: self属性objectinitdefunitclasshp
1条回答
网友
1楼 · 发布于 2024-09-27 00:16:22

getHit()方法中传递参数:

  • hp
  • attack
  • defence

但是当您在enemyUnit.getHit(enemyUnit, tackle, unit)中调用它时,您传递的是enemyUnit,它是Pokemon类的一个对象。这会导致错误。你知道吗

您可能希望在以下位置传递正确的参数:

enemyUnit.getHit(...) # Correct the parameters

编辑:

我认为最好的办法是实现getHit()方法,如下所示:

def getHit(self, other, move): 
    self.hp -= move.damage * other.attack / self.defence
    print str(self.hp)

并称之为:

enemyUnit.getHit(unit, tackle)

注意,您传递的是hpattack,它们是Pokemon的属性。您可以通过调用obj.hpobj.attack来使用它们。你知道吗

相关问题 更多 >

    热门问题