覆盖override(也叫重写overwrite)
什么是覆盖?
覆盖是指有继承关系的类中,子类中实现了与基类同名的方法
在子类实例调用该方法时,实际调用的是子类中的覆盖版本,这种现象叫作覆盖。
子类对象显示调用基类方法的方式:
基类名.方法名(实例,参数)
'''
此模块用来演示覆盖run方法
'''
class Human:
def say(self,what):
print('说:',what)
def run(self,speed):
print('正在以',speed,'m/s速度奔跑!')
class Teacher(Human):#继承Human类
def teacher(self,language):
print('老师正在教:',language)
def run(self,speed):
print('老师正在以',speed,'m/min的速度走')
class Student(Teacher):#继承Human类
def study(self,progam):
print('正在学习:',progam)
def run(self,speed):
print('学生在跑步,速度为:',speed,'m/s','这是一个Student类内定义的run,把Human中继承的run方法覆盖掉了')
def walk(self,speed):#走的方法
self.run(speed) #调用自身
# self.__class__.__base__run(self,speed)#借助于self调用父类Human中的run
# print('正在以:',speed,'m/s速度行走')
h1=Human()
s1=Student()
t1=Teacher()
h1.run(5)
s1.run(6)#此时调用的是Stundent的覆盖方法override,相当于重写了一个run方法
Human.run(s1,10)#此时s1不在调用自己Student类内的run,而是调用Human父类中的run了,方法是括号内:第一个传对象,第二个传参数
s1.walk(3)
t1.run(7)
t1.teacher('英文')
# print('Teacher类的基类',Teacher.__base__)
# print('Student类的基类',Student.__base__)
# print('object类的基类',object.__base__)
#
#
# t1.__class__.__base__