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

2024-09-30 22:21:21 发布

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

新来的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, 敌人。进攻等来增加。你知道吗

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

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


Tags: nameselfinitdefclasshpdefenseattack
2条回答

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

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

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

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

for enemy in enemies:
    enemy.hp += 1

作为旁白,我想问一下,对于Executioner、Zombie和Goblin,是否真的需要单独的类;它们只是每个stat的数字不同,所以也许您应该在__init__方法中接受这些值作为泛型敌方类。你知道吗

danielroseman所说的是真的,在编写代码时应该尽量不要重复。如果两个对象非常相似,只是在某些值上不同,那么它们实际上是同一个对象。所有的自行车都是自行车,但有些有不同的车轮尺寸,例如。在这里,您的对象都是一个敌方对象,可以这样实现。你知道吗

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

class Zombie(Enemy):

如果敌人的等级是这样定义的,例如:

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

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

尽管如此,丹尼尔·罗斯曼是对的。你应该把所有这些都放在一个类,并通过在惠普等建设。你知道吗

相关问题 更多 >