【问题标题】:How to call class attributes for a child class如何调用子类的类属性
【发布时间】:2020-05-19 15:47:44
【问题描述】:

遗憾的是,这个问题有点误导。我找不到问我问题的好方法。 我正在制作一个基于文本的小型 rpg。 我不知道怎么说“嘿,这个敌人已经生成,加载它的属性。”

我有:

class Entity:
    def __init__(self, ID, name,  maxhealth, health, strength, defence, strBuff, defBuff):
        self.ID = ID
        self.name = name
        self.maxhp = maxhealth
        self.hp = health
        self.Str = strength
        self.Def = defence
        self.strBuff = strBuff
        self.defBuff = defBuff

class Monster(Entity):
    pass

Goblin = Monster(0, "Goblin", 10, 10, 5, 2, 0, 0)
goblin = {"ID": Goblin.ID, "name": Goblin.name, Goblin.hp: 10, Goblin.Str: 5, Goblin.Def: 2, Goblin.strBuff: 0, Goblin.defBuff: 0}
Satyr = Monster(1, "Satyr", 5, 5, 3, 6, 0, 0)
satyr = {"ID": Satyr.ID, "name": Satyr.name, Satyr.hp: 5, Satyr.Str: 3, Satyr.Def: 6, Satyr.strBuff: 0, Satyr.defBuff: 0}

而且我找不到类似的说法。

Monster.hp -= Player.Str

我似乎只能对指定的敌人这样做。

【问题讨论】:

  • 我猜Goblin 应该是Monster 的子类,而goblinGoblin 的一个实例。然后你可以简单地做goblin.hp -= player.str
  • Goblingoblin 之间的预期区别是什么?为什么一个是Monster 类实例,另一个是字典?
  • 我实际上就是这样,我的问题是它不适用于色狼。我想取当前怪物的血量并从中减去,而不仅仅是地精的

标签: python python-3.x class attributes


【解决方案1】:

您正在创建两个 goblinsatyr 字典。它们不是必需的,因为它们包含与 GoblinSatyr 两个对象相同的数据。

相反,您可以直接使用这两个对象。

下面,我添加了一个__str__ 方法来打印有关实体的信息,并且我还添加了一个hit 方法以使一个实体与另一个实体发生碰撞。

这是在回答你的问题吗?

class Entity:
    def __init__(self, ID, name,  maxhealth, health, strength, defence, strBuff, defBuff):
        self.ID = ID
        self.name = name
        self.maxhp = maxhealth
        self.hp = health
        self.Str = strength
        self.Def = defence
        self.strBuff = strBuff
        self.defBuff = defBuff

    def __str__(self):
        return self.name + " has " + str(self.hp) + "HP"

    def hit(self, otherEntity):
        print(self.name + " hits " + otherEntity.name + "!!")
        otherEntity.hp -= self.Str

class Monster(Entity):
 pass

goblin = Monster(0, "Goblin", 10, 10, 5, 2, 0, 0)
satyr = Monster(1, "Satyr", 5, 5, 3, 6, 0, 0)

print(goblin)
print(satyr)
satyr.hit(goblin)
print(goblin)
print(satyr)
goblin.hit(satyr)
print(goblin)
print(satyr)

输出:

Goblin has 10HP
Satyr has 5HP
Satyr hits Goblin!!
Goblin has 7HP
Satyr has 5HP
Goblin hits Satyr!!
Goblin has 7HP
Satyr has 0HP

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多