多重继承:例子

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

机器人课程

机器人多重继承

我们教程的这一章旨在加深读者对前一章中建立的多重继承的理解。我们将为 Python 编程语言的这一重要的面向对象原则提供进一步的扩展示例。我们将使用 Robot 类的变体作为超类。我们还将使用 Python 之类的属性总结面向对象的其他一些重要方面。我们还将找出覆盖、重载和覆盖之间的区别。

这个例子是在我的现场 Python 培训课程中成长起来的,因为我迫切需要简单易懂的子类化例子,最重要的是一个用于多重继承的例子。

从超类开始,Robot我们将派生出两个类:一个FightingRobot类和一个NursingRobot类。

最后,我们将定义FightingRobot类和NursingRobot类的“组合” ,即我们将实现一个类FightingNurseRobot,它将继承自FightingRobotNursingRobot

让我们从我们的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 ]  +  gen1 [ 2 ]]
婴儿
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值