机器人课程

我们教程的这一章旨在加深读者对前一章中建立的多重继承的理解。我们将为 Python 编程语言的这一重要的面向对象原则提供进一步的扩展示例。我们将使用 Robot 类的变体作为超类。我们还将使用 Python 之类的属性总结面向对象的其他一些重要方面。我们还将找出覆盖、重载和覆盖之间的区别。
这个例子是在我的现场 Python 培训课程中成长起来的,因为我迫切需要简单易懂的子类化例子,最重要的是一个用于多重继承的例子。
从超类开始,Robot我们将派生出两个类:一个FightingRobot类和一个NursingRobot类。
最后,我们将定义FightingRobot类和NursingRobot类的“组合” ,即我们将实现一个类FightingNurseRobot,它将继承自FightingRobot和NursingRobot。
让我们从我们的Robot类开始:我们使用一个私有类属性,__illegal_names其中包含一组不允许用于命名机器人的名称。
通过提供一种__add__方法,我们确保我们的机器人能够传播。将自动创建生成的机器人的名称。“婴儿”机器人的名字将由父母双方的名字串联而成,中间用连字符分隔。如果父名称的名称包含连字符,我们将仅使用连字符之前的第一部分。
机器人将使用 0 到 1 之间的随机值来“激活”属性health_level。如果机器人的健康级别低于由类属性定义的阈值Robot.__crucial_health_level,则它将需要来自NursingClass. 为了确定机器人是否需要治疗,我们提供了一种方法needs_a_nurse,如果该值低于该值则返回 True Robot.__crucial_health_level,否则返回False。
随机导入
类 机器人():
__illegal_names = { “亨利” , “奥斯卡” }
__crucial_health_level = 0.6
def __init__ ( self , name ):
self 。name = name #---> 属性设置器
self 。health_level = 随机。随机()
@property
def name ( self ):
返回 self 。__名称
@名称。setter
def name ( self , name ):
如果 名称 在 Robot 中。__illegal_names :
自我。__name = "Marvin"
else :
self . __name = 名字
def __str__ ( self ):
返回 self 。名称 + ", 机器人"
def __add__ ( self , other ):
first = self 。名字。拆分(“-” )[ 0 ]
秒 = 其他。名字。split ( "-" )[ 0 ]
返回 机器人(第一个 + "-" + 第二个)
def need_a_nurse ( self ):
如果 self . health_level < 机器人。__crucial_health_level :
返回 真
否则:
返回 假
高清 say_hi (个体经营):
打印(“你好,我是” + 自我。名称)
打印(“我的健康水平是:” + STR (自我。health_level ))
我们现在可以测试新设计的Robot类。注意连字符名称如何代代变化:
first_generation = (机器人(“Marvin” ),
机器人(“Enigma-Alan” ),
机器人(“Charles-Henry” ))
gen1 = first_generation # 用作缩写
婴儿 = [ gen1 [ 0 ] + gen1 [ 1 ], gen1 [ 1 ]

这篇博客深入探讨了Python编程中的多重继承概念,通过一个机器人课程的示例来解释。首先介绍了基础的Robot类,然后派生出NursingRobot和FightingRobot子类,分别增加了治疗和战斗的功能。文章还讨论了类之间的继承关系和方法覆盖,展示了如何在设计中避免不良的类型转换。最后,给出了一个结合治疗和战斗能力的机器人例子,演示了多重继承的实际应用。
最低0.47元/天 解锁文章
1277

被折叠的 条评论
为什么被折叠?



