Python学习之旅2021.01.24
指导教师:逻辑教育讲师Amy
一、多继承
多继承遵循C3算法,通过print(子类.__mro__)
可查看顺序
- 情景1:遵循左边优先原则
- 情景2:左边运行到根
- 情景3:左边优先,根最后执行
二、多态
- 定义时和运行时的类型不一样,此时就成为多态
三、魔法方法
- 介绍:Python中一些内置的特定方法,在进行特定操作时会自动被调用,这些方法称为魔法方法。命名时用双下划线包裹,如
__名字__
- 常用魔法方法
- 1、
__doc__
:用来查看类的说明文档
- 2、
__dict__
用来获取类或实例属性的字典
- 3、
__del__
析构方法(Python中解释器自带垃圾回收机制,此方法不需要主动封装),当由类创建的实例对象,被删除或在内存中被释放,将自动执行- 当代吗全部执行完毕自动触发
- 需要提前触发时,通过
del
关键字,删除所有对象后触发
- 当代吗全部执行完毕自动触发
- 1、
- 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)
运行结果