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

Python,如何在大类下创建特定类,python,class,text,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.ab

这里是新的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")
我认为一种快速实现这一点的方法是将这些类定义为一个名为“敌人”的大类,然后调用敌人.hp、敌人.attack等来增加

但我也不知道怎么做,因为我现在还很小


关于如何通过在大类下指定小类来增加类属性的建议,或者快速增加类属性的方法(只是键入它们并增加它们不会起作用,因为我会有很多敌人怪物),我们将非常感谢

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

最好将它们简单地放入一个列表中,您可以循环浏览:

enemies = []
...
ExecutionerIG = Executioner("Executioner the slayer")
enemies.append(ExecutionerIG)
等等。然后,在必要时,只需迭代:

for enemy in enemies:
    enemy.hp += 1

顺便说一句,我想问一下,你们是否真的需要为刽子手、僵尸和地精单独开设课程;它们只在每个属性的数字上有所不同,所以也许你应该在通用敌方类的
\uuuu init\uuuu
方法中接受这些值。

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

不过,我会回答您的问题,因为子类化非常重要。要对类进行子类化,请在定义中传入父类,如下所示:

class僵尸(敌人):

然后,如果敌方等级是这样定义的,例如:

class敌人:
def攻击():

您可以调用对僵尸对象的攻击。它将在Zombie类中查找attack(),如果找不到,它将在父类中查找它。如果在父类中找不到它,它将在父类中查找它,以此类推,一直移动到顶级对象。如果根本找不到它,将引发异常。例如,如果在Zombie类中定义了attack(),那么它将覆盖敌方类中的attack()


尽管如此,丹尼尔·罗斯曼是对的。你应该把所有这些都放在一个类中,并在构建时传递hp等。你能给我一个关于“在通用敌方类的init方法中接受这些值”的示例吗?你说我尝试过,但它是错误的。你说的可能是对的,但我不知道怎么做,哈哈。和你用
name
属性做的完全一样。谢谢你的帮助,但是你知道怎么做Daniel Roseman说的吗?要在泛型类的init方法中接受这些值?请提供详细的示例,不胜感激!!这与使用name属性所做的相同。因此,您需要
def\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,180,19,0,0,7,28)