面向对象的三大特性:继承(在上节),封装,多态
封装:将一些东西内容封装到一个地方,还可以取出来(例如:类设置静态属性,设置一些方法)
调用被封装的内容,有两种情况: 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