多态

多态

  • 因为python中变量不用声明,所以不存在父类引用指向子类对象的多态类型,同时python不支持重载,所以python的使用没有java那么明显,所以在python中刻意提到多态的意义不是特别大

  • 什么是多态?

  • 一个类表现出来的多种形态,实际上是通过继承来完成的,主要指的是多个子类继承自一个父类,子类是属于父类的,通过父类寻找子类(狗类继承自动物类,猫类也继承自动物类,那么狗是动物类型的,猫也是动物类型的,在这个例子里,动物这个类表现出了狗和猫的形态)

  • python中多态的作用:

    • 让具有不同功能的函数使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数
  • python中多态的特点:

    • 增强代码的外部调用灵活度,让代码更加通用,兼容性比较强

    • 多态是调用方法的技巧,不会影响到内部设计

    • class A:
          def fly(self):
              a=1+2
              return a
      
      class B:
          def fly(self):
              a=2+2
              return a
      
      
      def f(obj):
          return obj.fly()
      a = A()
      print(f(a))
      b = B()
      print(f(b))
      
      得:
      3
      4
      
  • 多态的应用场景

    • 对象所属的类之间没有继承关系
    class Duck:   #鸭子类
        def fly(self):
            print('鸭子沿着地面飞起来了')
    class Swan:   #天鹅类
        def fly(self):
            print('天鹅在空中翱翔')
    class Plane:  #飞机类
        def fly(self):
            print('飞机隆隆的飞机来了')
    
    def a(obj):
        obj.fly()
    
    duck=Duck()
    a(duck)
    
    swan=Swan()
    a(swan)
    
    plane=Plane()
    a(plane)
    得:
    鸭子沿着地面飞起来了
    天鹅在空中翱翔
    飞机隆隆的飞机来了
    
    • 对象所属的类之间有继承关系

      class Gradapa:   #爷爷
          def __init__(self,money,obj):
              self.money=money
              self.obj=obj
              print(money)
              print(obj)
          def p(self):
              print('this is gradapa')
      
      class Father(Gradapa):  #父亲类
          def __init__(self,money,job):  #money:工资   job:职业
              super().__init__(money,job)
              self.job=job
          def p(self):
              print('this is father,我重写了父类的方法')
      
      class Mother(Gradapa):  #母亲类
          def __init__(self,money,job):  #money:工资   job:职业
              super().__init__(money,job)
              self.job=job
          def p(self):
              print('this is father,我重写了妈妈类的方法')
      
      
      def fc(obj):
          return obj.p()
      
      gradapa=Gradapa(3000,'农民')
      father=Father(2000,"工人")
      mother=Mother(1000,"老师")
      
      
      fc(gradapa)
      fc(father)
      fc(mother)
      

鸭子类型

  • (不确定对错自己想的)某个类在没有继承关系的情况下使用了某个特定的功能,这个特定功能就是这个类的鸭子类型
posted @ 2021-06-03 16:34  刘家小仙女  阅读(31)  评论(0编辑  收藏  举报