Python,如何在一个大类下创建特定的类

时间:2016-03-15 09:33:38

标签: python class text

这里有新的python学习者。我正在尝试在python中设计一个文本RPG,我希望所有敌人小怪的统计数据在游戏的特定部分增加。这是我的一些敌人的代码:

class Executioner:
    def __init__(self,name):
    self.name = name

    self.potions = 0
    self.maxhp = 800 
    self.hp = self.maxhp 
    self.attack = 25 
    self.ability = 0 
    self.defense = 0 
    self.goldgain = 333 
    self.expgain = 250 
ExecutionerIG = Executioner("Executioner the slayer")

class Goblin:
    def __init__(self,name):
    self.name = name

    self.potions = 0
    self.maxhp = 80
    self.hp = self.maxhp
    self.attack = 25
    self.ability = 0
    self.defense = 0
    self.goldgain = 5.5
    self.expgain = 22
GoblinIG = Goblin("Goblin")

class Zombie:
    def __init__(self,name):
    self.name = name

    self.potions = 0
    self.maxhp = 180
    self.hp = self.maxhp
    self.attack = 19    
    self.ability = 0
    self.defense = 0
    self.goldgain = 7
    self.expgain = 28
ZombieIG = Zombie("Zombie")

我认为快速做到这一点的方法可以将这些类定义为一个名为enemies的大类,然后调用enemies.hp,enemies.attack等来增加。

但是我不知道该怎么做,因为我现在很温顺。

关于如何通过在大班级下指定小班级来增加班级统计数据的建议或者快速增加班级统计数据的方法(只是输入它们并增加它们将无法工作,因为我将拥有大量敌人的怪物)将会大大增加感谢。

2 个答案:

答案 0 :(得分:1)

不,这不是一个好方法。嵌套类在Python中很少有用,在这里肯定没有用。

将它们简单地放入列表中可以更好地完成:

enemies = []
...
ExecutionerIG = Executioner("Executioner the slayer")
enemies.append(ExecutionerIG)

等等。然后,在必要时,只需迭代:

for enemy in enemies:
    enemy.hp += 1

顺便说一句,我会质疑你是否真的需要为刽子手,Zombie和Goblin提供单独的课程;它们只是每个统计数据的数量不同,所以也许你应该在__init__方法中接受那些用于通用Enemy类的值。

答案 1 :(得分:1)

丹尼尔罗斯曼所说的是真的,你应该在编写代码时不要重复自己。如果两个对象非常相似且只是某些特定值不同,那么它们实际上是同一个对象。所有自行车都是自行车,但有些车轮尺寸不同。在这里,你的对象都是一个Enemy对象,并且可以这样实现。

然而,我会回答你的问题,因为子类化非常重要。要为类创建子类,可以在定义中传入父类,如下所示:

class Zombie(Enemy):

然后,如果Enemy类被定义为例如:

class Enemy: def attack(): <your code>

你可以在Zombie对象上调用攻击。它将在Zombie类中查找attack(),如果找不到它,它将在父类中查找它。如果它没有在父类中找到它,它将在该父类的类中查找它,依此类推,一直向上移动到顶级对象。如果它根本找不到,则会引发异常。例如,如果您在Zombie类中定义了attack(),那么它将覆盖Enemy类中的attack()。

尽管如此,丹尼尔罗斯曼是对的。你应该将所有这些放在一个类中,并在构造时传递hp等。