继承与多态

继承

基本架构

#父类(基类)
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方法,就是我们想要的类型)
posted @ 2020-09-24 10:43  小杨的冥想课  阅读(215)  评论(0编辑  收藏  举报