Python -- 面向对象的三大特性及深入了解super()

面向对象的三大特性:继承(在上节),封装,多态

封装:将一些东西内容封装到一个地方,还可以取出来(例如:类设置静态属性,设置一些方法)

​ 调用被封装的内容,有两种情况: 1. 通过对象直接调用 2. 通过self间接调用

多态:一个事物的多种形态,Python中默认支持多态.

鸭子类型(面试会问): A,B两个类,没有任何关系(完全没有耦合性),独立的两个,但里面的功能相似,所以Python一般会将类似于A,B两个类里面的相似的功能设定相同的名字,A,B虽然没有关系,但是在某种意义上统一了一个标准,用起来更方便.

super()深入了解

super() 严格意义并不是执行父类方法

  • 单继承: super() 执行父类的方法
  • 多继承: super(S,self) 严格按照self 从属于的类的mro的执行顺序,执行S的下一位.
# super() 多继承举例
class A:
    def f1(self):
        print('in A')

class Foo(A):
    def f1(self):
        super().f1()
        print('in Foo')

class Bar(A):
    def f1(self):
        print('in Bar')

class Info(Foo,Bar):
    def f1(self):
        super(Foo,self).f1()  #执行Foo 的下一位是 Bar
        print('in Info f1')

obj = Info()
obj.f1()        # Info 的 mro 顺序 Info,Foo,Bar,A
# in Bar
# in Info f1
posted on 2019-07-12 08:03  ShenQiang  阅读(170)  评论(0编辑  收藏  举报