首先请大家回忆一下, 类是从哪里来的?
类就是把一组相似的对象中相同的属性和方法抽取出来, 构成一个抽象的类别概念而形成的。
那么现在问题来了, 如果情况变得更加复杂了, 除了前锋类, 我们又有了后卫类, 以及前腰类。
而这几个类别之间, 本身又有很多相似之处, 那么在这几个类之间就会有很多重复的代码存在。
这样的话我们不就又要编写很多重复的功能相同的代码了吗?
如何解决这个问题呢?
答案就是再一次将这几个类中相同的部分抽象出来, 形成一个他们的父类。
然后用这几个类别直接继承这个父类, 就直接获取到了这部分功能。
继承的方法:
class 前锋:
foot_num = 2 # 都有两只脚
race = '人类'
def __init__(self, name, speed):
self.name = name
self.speed = speed
def introduce(self):
return "我是一个球员, 我的姓名是{}, 我的种族是{}, 我有{}只脚".format(self.name, self.race, self.foot_num)
def run(self, status):
if status == 0:
return '这个前锋正在冲刺'
elif status == 1:
return '这个前锋慢跑'
elif status == 2:
return '这个前锋正在溜达'
def shoot(self, status):
if status == 0:
return '射歪了'
elif status == 1:
return '射到门框上面'
elif status == 2:
return '射进了!'
class 后卫:
foot_num = 2 # 都有两只脚
race = '人类'
def __init__(self, name, speed):
self.name = name
self.speed = speed
def introduce(self):
return "我是一个球员, 我的姓名是{}, 我的种族是{}, 我有{}只脚".format(self.name, self.race, self.foot_num)
def run(self, status):
if status == 0:
return '这个后卫正在冲刺'
elif status == 1:
return '这个后卫慢跑'
elif status == 2:
return '这个后卫正在溜达'
def defence(self, status):
if status ==0:
return '防守失败'
elif status == 1:
return '铲球破坏'
elif status == 2:
return '断球成功!'
注意到这两个类之间, 有哪些共同点, 有哪些不同点?
我们把相同的部分拿出来创建一个"球员"类, run方法先放入前锋的代码
class 球员:
foot_num = 2 # 都有两只脚
race = '人类'
def __init__(self, name, speed):
self.name = name
self.speed = speed
def introduce(self):
return "我是一个球员, 我的姓名是{}, 我的种族是{}, 我有{}只脚".format(self.name,self.race, self.foot_num)
def run(self, status):
if status == 0:
return '这个前锋正在冲刺'
elif status == 1:
return '这个前锋慢跑'
elif status == 2:
return '这个前锋正在溜达'
在前锋名称后面添加括号, 括号中就是继承的类。
在前锋中, 我们只需要实现射门方法即可。
class 前锋(球员):
def shoot(self, status):
if status == 0:
return '射歪了'
elif status == 1:
return '射到门框上面'
elif status == 2:
return '射进了!'
p1 = 前锋('张三', 120)
p1.foot_num
p1.introduce()
p1.run(1)
p1.shoot(2)
我们可以看到, 这个时候, 前锋已经获得了两个类的全部功能!
下面我们再来看后卫这个类, 后卫类中虽然也有跑步, 但是功能却和球员类不相同。
我们可以重新在后卫类中编写这个方法, 那么新的run方法就会覆盖掉父类的同名方法, 这就叫做方法重写。
class 后卫(球员):
def run(self, status):
if status == 0:
return '这个后卫正在冲刺'
elif status == 1:
return '这个后卫慢跑'
elif status == 2:
return '这个后卫正在溜达'
def defence(self, status):
if status ==0:
return '防守失败'
elif status == 1:
return '铲球破坏'
elif status == 2:
return '断球成功!'
d1 = 后卫('甲一', 88)
d1.introduce()
#同样一个run方法, 但是实现的功能已经发生了变化,在后卫类中定义的run方法覆盖了父类中的run方法。
d1.run(0)
d1.defence(2)