Python学习之旅(核心编程基础篇013面向对象三)

Python学习之旅2021.01.24

指导教师:逻辑教育讲师Amy

一、多继承

多继承遵循C3算法,通过print(子类.__mro__)可查看顺序

  • 情景1:遵循左边优先原则
    在这里插入图片描述
  • 情景2:左边运行到根
    在这里插入图片描述
  • 情景3:左边优先,根最后执行
    在这里插入图片描述

二、多态

  • 定义时和运行时的类型不一样,此时就成为多态
    在这里插入图片描述

三、魔法方法

  • 介绍:Python中一些内置的特定方法,在进行特定操作时会自动被调用,这些方法称为魔法方法。命名时用双下划线包裹,如__名字__
  • 常用魔法方法
    • 1、__doc__:用来查看类的说明文档
      在这里插入图片描述
    • 2、__dict__用来获取类或实例属性的字典
      在这里插入图片描述
    • 3、__del__析构方法(Python中解释器自带垃圾回收机制,此方法不需要主动封装),当由类创建的实例对象,被删除或在内存中被释放,将自动执行
      • 当代吗全部执行完毕自动触发
        在这里插入图片描述
      • 需要提前触发时,通过del关键字,删除所有对象后触发
        在这里插入图片描述
  • 4、__call__将一个对象变成可调用的对象(类中存在该方法时,其实例化得到的对象可直接被调用)
    在这里插入图片描述
  • 5、__new__用于创建和返回一个对象。类准备自身实例化时调用
    • 对象创建执行顺序,通过__new__方法创建对象,并将对象返回传给__init__
    • __init____new__的区别:__init__为实例方法,__new__为静态方法;__init__创建对象后调用,__new__用来创建对象
      在这里插入图片描述

四、单例模式

一种常用软件设计模式。如果希望系统中某个类等的对象只能是一个时,可以使用单例模式。单例模式方便系统对实例个数控制并节约系统资源。

  • 单例模式实现:当对象不存在时创建对象,当对象存在时永远只返回当前对象
    在这里插入图片描述

五、作业

  • 作业一
    在这里插入图片描述
class GunAk47(object):  # 枪类
    def __init__(self):
        self.model = 'AK47'  # 默认型号
        self.bullet_num = 30  # 默认弹药数量

    def shoot(self):  # 连续发射子弹
        while self.bullet_num > 0:
            self.bullet_num -= 1
            print('da', end='')
        print()  # 换行
        print('弹药不足')  # 提示

    def loading(self):  # 装弹
        self.bullet_num = 30
        print('换夹成功!')


class SoldierS(object):  # 士兵类
    def __init__(self, soldier_name, gun_name):
        self.soldier_name = soldier_name
        self.gun_name = gun_name

    def fire(self):  # 士兵开火方法类
        if self.gun_name == 'Ak47':  # 判断是否持枪
            gun = GunAk47()  # 枪类实例化
            gun.shoot()
            if gun.bullet_num == 0:
                gun.loading()


Amy = SoldierS('Amy', 'Ak47')
Amy.fire()  # 士兵开火

运行结果
在这里插入图片描述

  • 作业二
    在这里插入图片描述
class CarOne(object):
    def __init__(self, color, weight, velocity=0, wheel=4):
        self.color = color
        self.wheel = wheel
        self.weight = weight
        self.velocity = velocity

    def speed_up(self):
        pass

    def speed_down(self):
        pass

    def parking(self):
        self.velocity = 0


class CarTwo(CarOne):
    def __init__(self, model, color, weight, velocity=0, wheel=4):
        self.model = model
        super().__init__(color, weight, velocity=0, wheel=4)  # 调用父类方法

    def speed_down(self):
        self.velocity += 1

    def speed_up(self):
        self.velocity -= 1

    def __str__(self):
        return f'车辆型号:{self.model}\n颜色:{self.color}\n重量:{self.weight}'


car = CarTwo('AE86', '白色', '925kg')
print(car)

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值