Python面向对象编程—多态
定义:
是一种使用对象的方式,子类重写父类的方法(非必须),调用不同子类
对象的相同
父类方法,可以产生不同
的执行结果,简言之就是:传入不同的对象,产生不同的结果。
好处:
调用灵活,有了多态,更容易编写出通用的代码,做出通用的编程,以适应需求的不断变化。
使用步骤:
1.定义父类,提供公共的方法
2.定义子类,重写父类的方法
3.传递子类对象给调用者,得到不同子类执行的效果不同
举例1:
class Dog(object): # 定义父类,提供公共方法
def work(self):
pass
class DrugDog(Dog): # 定义子类,重写父类的方法
def work(self):
print("缉毒")
class ArmyDog(Dog): # 定义子类,重写父类的方法
def work(self):
print("追击敌人")
class Person(object):
def do_work(self,dog): # 定义调用方法,此处也可以直接写一个方法,不用类也是可以的
dog.work()
if __name__ == '__main__':
adog = ArmyDog()
ddog = DrugDog()
p = Person()
p.do_work(adog) # 输出 追击敌人
p.do_work(ddog) # 输出 缉毒
举例2
class Person(object):
def __init__(self):
pass
def show(self):
pass
class Teacher(object):
def __init__(self,name,age):
self.name = name
self.age = age
self.appli = '教师'
def show(self):
print("我叫%s,今年%d岁,我的职业是%s" % (self.name,self.age,self.appli))
class Docter(object):
def __init__(self, name, age):
self.name = name
self.age = age
self.appli = '医生'
def show(self):
print("我叫%s,今年%d岁,我的职业是%s" % (self.name, self.age, self.appli))
def self_show(Person):
Person.show() # 运行时的多态
if __name__ == '__main__':
T1 = Teacher("张三",23)
T2 = Teacher("李四",26)
D1 = Docter("王五",45)
self_show(T1)
self_show(D1)
self_show(T2)
# 输出
# 我叫张三,今年23岁,我的职业是教师
# 我叫王五,今年45岁,我的职业是医生
# 我叫李四,今年26岁,我的职业是教师