• 继承与多态


    继承

    基本架构

    #父类(基类)
    class Base:
        def f1(self):
            print("yang")
    #子类(派生类)
    class Foo(Base):
        def f2(self):
            print("zi")
        #or
        def f1(self):
            print("liang")
    #创建一个子类的对象
    obj = Foo()
    #执行对象,方法时,优先在自己的类中找,如果没有就在父类中找
    obj.f2()
    obj.f1()#在父类中寻找,如果子类中有f1则在优先用自己的
    #父类不能继承子类
    
    • 应用场景
      • 多个类中,如果有多个公共的方法,可以放到基类中避免重复编写

    继承关系中,查找方法的顺序

    • #示例一
      #父类
      class Base:
          def f1(self):
              print("base.f1")
      #子类
      class Foo(Base):
          def f2(self):
              self.f1() #此处的self为obj
              print("foo.f2")
      
      obj = Foo()
      obj.f2()
      
      #示例二
      #父类
      class Base:
          def f1(self):
              print("base.f1")
      #子类
      class Foo(Base):
          def f2(self):
              self.f1() #此处的self为obj
              print("foo.f2")
          def f1(self):
              print("foo.f1")
      
      obj = Foo()
      obj.f2()
      #结果
      #foo.f1
      #foo.f2
      
      #示例三
      #父类
      class Base:
          def f1(self):
              self.f2()
              print("base.f1")
          def f2(self):
              print("base.f2")
      #子类
      class Foo(Base):
          def f2(self):
              print("foo.f2")
      
      obj = Foo()
      obj.f1()
      #结果
      #foo.f2
      #base.f1
      
    • 注意事项

      • self到底是谁?
      • self是哪个类创建的,就从此类中开始找,最后才遵循自己没有就找父类
      • 多个继承从左至右,依次查找

    多态(多种形态)(鸭子模型)

    • def func(arg):#arg的形态多种多样只要满足可以切片即可
          v = arg[-1]
          print(v)
      
    • 鸭子模型

      • 对于一个函数,python对于参数的类型不会限制,那么传入参数时就可以是各种类型,在函数中如果有。例如:arg.send方法,那么就是对于传入类型的一个限制(必须有send方法)。就是鸭子模型,类似于上述的函数我们认为只要能呱呱叫的就是鸭子(只要有send方法,就是我们想要的类型)
  • 相关阅读:
    Leetcode题解(4):L216/Combination Sum III
    零基础学python-3.1 python基本规则和语句
    3D打印技术之切片引擎(4)
    自己定义struts2中action类型转换器
    Android开发之实现锁屏功能
    用户上传本地磁盘中的一个图片文件作为头像
    微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服
    读《疯狂Java讲义》笔记总结三
    这才是爱情最好的样子
    数据挖掘 与 Web开发何去何从
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13722951.html
Copyright © 2020-2023  润新知