继承与多态
继承
基本架构
#父类(基类)
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方法,就是我们想要的类型)
记录学习的点点滴滴