Python趣味入门14:类的继承-什么类可以被继承

。COVID-19新冠病毒全球肆虐,其中德尔塔变种因更强的传播性引发了新一轮的疫情,连中国多个城市都没有能幸免。病毒复制变异的过程就是下一代继承

可以看到无需要任何设置,子类可以直接使用父类的方法,但是子类必须通过重构__init()__这个函数,并且在函数中使用super()方法来,创建父类通过_init()__创建的实例属性。

为了让读者更加了解方法的重构,我们假设“超级兵”自带“反甲”,即在受到攻击时自己受伤的同时,会让对方损失生命值。我们通过继承Soldier类来看看这个“超级兵”的atta

表达式super()指的是父类的列表,这个语句就是调用父类Npc的初始化函数,这就显式地继承了NPC的3个属性:life(生命值)、harm(伤害力)和name(名称)。在其它情况下如果父类还有父类就会以MRO的顺序来排列。下面有文章是专门讲MRO的,可以参考:

下面的代码实现上面的类的继承,先定义最基本的NPC类和Soldier类如下:

图中第个节点都是类:下面我们就要实现上图两个类: NPC和Soldier,我们可以把各种角色以层次关系进行组织,假设我们正在给类似于王者荣耀的游戏做NPC的角色,其关系如下图所示:在上面Soldier类中没有定义attack(攻击)方法,为了重复利用角色的特性,“继承”过程在程序中通常必须由程序来手工的显式声明(当然也不排除能自我复制变异的程序存在:-) ),那么我们可不可以直接在子类中使用呢?添加并运行如下的代码:而attack是定义在其父类Npc中的,

可以把类Class看成病毒(代码)的DNA,那么定义新的类(Class)就相当于产生了新病毒,而从类创建实例的过程,就类似于同病毒自我复制产生很多DNA相同的病毒体, 类的继承就相当于这个DNA在复制过程中产生了变异,产生了新的种类的病毒DNA或是病毒的变种的DNA的过程。

在这样的继承关系里,所有的NPC都可以共享相同的底层逻辑:共享各种属性比如生命值,攻击能力(值是不同的但是名称相同);并且可以共享相同的行为(即方法)比如攻击,无论什么NPC攻击了就可以让对方减少生命值。

看上图的第二层,小兵继承自NPC,并且可以发展出自己的特性给下一层的Class重复使用。比如小兵可以增加“行走”这个行为(即方法),这个方法可以让小兵沿着兵线路径进行移动,无论什么兵都要共用这个行为。

从Npc类的定义(参考前文介绍的类的定义)分析,明显可以看到这个类有3个属性分别是life(生命值)、harm(伤害力)和name(名称)并且有攻击行为(方法)。

上述代码在游戏当中产生了红蓝两方的士兵,并且通过初始化方法传入了名称,并且通过实例调用了attack方法,如果这个方法起作用的话,那么其中被攻击的蓝方兵应该生命值下降。把整个程序一起运行,看到如下的结果:

Soldier子类完全重用了父类的attack方法,实际上也重构了父类的__init()__函数,以获得父类的属性。你作为游戏设计者,觉得这种“攻击”太普通了,想设计更酷炫的“攻击”,这就需要通过重构attack方法,来增加新的特性。

继承语法:子类士兵定义时直接在类名士兵(Soldier)后使用括号即可,该类没有产生新的属性,只是使用传入的名称覆盖了原来的name属性。大家注意如下的表达式:

文章已创建 311

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部