类继承,使用子类设置父类



我正在尝试学习更多关于Python类的知识,并且正在编写一个程序来帮助解决这个问题。我已将父类和子类定义如下:

class Character():
'Common base class for all characters'
    def __init__(self):
        self.attack = 1
        self.defence = 1
        self.strength = 1
    def setAttack(self, attack):
        self.attack = attack
    def setDefence(self, defence):
        self.defence = defence
    def setStrength(self, strength):
        self.strength = strength
class Enemy(Character):
    'Enemy Class'
    def __init__(self):
        self.setAttack(random.randint(5,20))
        self.setDefence(random.randint(5,20))
        self.setStrength(random.randint(5,20))

这意味着我可以用线定义一个敌人

enemy1 = Enemy()

我的观点是,然后我可以复制具有不同随机值的 Enemy 类来创建不同类型的敌人。 即创建一个与上面相同但具有不同随机值的 BiggerEnemy 类。

虽然上面的代码有效,但我读过的所有教科书和文档都表明我应该这样构建我的代码:

class Character():
    'Common base class for all characters'
    def __init__(self, attack, defence, strength):
        self.attack = attack
        self.defence = defence
        self.strength = strength
    def setAttack(self, attack):
        self.attack = attack
    def setDefence(self, defence):
        self.defence = defence
    def setStrength(self, strength):
        self.strength = strength

class Enemy(Character):
    'Enemy Class'
    def __init__(self, attack,defence,strength):
        Character.__init__(self, attack, defence, strength)
        self.attack = attack
        self.defence = defence
        self.strength = strength
        self.setAttack(random.randint(5,20))
        self.setDefence(random.randint(5,20))
        self.setStrength(random.randint(5,20))

这很好,但这意味着我必须通过设置攻击、防御和力量来声明进入儿童类的内容,以便创建敌人

enemy1 = Enemy(10,10,10)

想知道我的方法是否正确,以及我是否缺少有关类如何工作的内容。我读过的所有文档似乎都指出了我的代码是错误的,但替代方案似乎否定了对子类的需求。 因此,我第一次在stackoverflow上发布。

调用

super-init方法是一个很好的做法,所以我建议:

class Character():
    'Common base class for all characters'
    def __init__(self, attack, defence, strength):
        self.attack = attack
        self.defence = defence
        self.strength = strength

class Enemy(Character):
    'Enemy Class'
    def __init__(self):
        Character.__init__(self, attack=random.randint(5,20),
            defence=random.randint(5,20), strength=random.randint(5,20))

二传手是不必要的。

最新更新