代码改变世界

python面向对象:多态

2020-11-16 15:29  清风软件测试开发  阅读(119)  评论(0编辑  收藏  举报

python面向对象:多态

多态的应用场景

1. 对象所属的类之间没有继承关系

调用同一个函数fly(), 传入不同的参数(对象),可以达成不同的功能

class Duck(object):                                  # 鸭子类
    def fly(self):
        print("鸭子沿着地面飞起来了")

class Swan(object):                                  # 天鹅类
    def fly(self):
        print("天鹅在空中翱翔")

class Plane(object):                                 # 飞机类
    def fly(self):
        print("飞机隆隆地起飞了")

def fly(obj):                                        # 实现飞的功能函数
    obj.fly()

duck = Duck()
fly(duck)

swan = Swan()
fly(swan)

plane = Plane()
fly(plane)

===运行结果:===================================================================================
鸭子沿着地面飞起来了
天鹅在空中翱翔
飞机隆隆地起飞了

2. 对象所属的类之间有继承关系(应用更广)

class gradapa(object):
    def __init__(self,money):
        self.money = money
    def p(self):
        print("this is gradapa")
 
class father(gradapa):
    def __init__(self,money,job):
        super().__init__(money)
        self.job = job
    def p(self):
        print("this is father,我重写了父类的方法")
 
class mother(gradapa): 
    def __init__(self, money, job):
        super().__init__(money)
        self.job = job
 
    def p(self):
         print("this is mother,我重写了父类的方法")
         return 100
         
#定义一个函数,函数调用类中的p()方法
def fc(obj): 
    obj.p()
gradapa1 = gradapa(3000) 
father1 = father(2000,"工人")
mother1 = mother(1000,"老师")

fc(gradapa1)            #这里的多态性体现是向同一个函数,传递不同参数后,可以实现不同功能.
fc(father1)
print(fc(mother1))
===运行结果:===================================================================================
this is gradapa
this is father,我重写了父类的方法
this is mother,我重写了父类的方法
100

 

总结如下:

多态性依赖于:继承
综合来说:多态性:定义统一的接口,一种调用方式,不同的执行效果(多态性)
# obj这个参数没有类型限制,可以传入不同类型的值   ;参数obj就是多态性的体现
def func(obj):    
    obj.run()        # 调用的逻辑都一样,执行的结果却不一样


class A (object):
     def run(self):
         pass       


class A1 (A):
     def run(self):
         print ('开始执行A1的run方法')
class A2 (A):
     def run(self):
         print ('开始执行A2的run方法')
class A3 (A):
     def run(self):
         print ('开始执行A3的run方法')

obj1
= A1 () obj2 = A2 () obj3 = A3 () func(obj1) 输出:开始执行A1的run方法 func(obj2)    输出:开始执行A2的run方法 func(obj3)    输出:开始执行A3的run方法