类的继承
1). 两个类之间是从属关系
2). 代码复用
实现继承
能直接使用父[基]类的属性和方法
接口继承
只能使用父类的属性和方法的名称,自己处理代码实现
单继承
class Father(object):
pass
class Child(Father):
pass
重写
【防止执行父类中的方法】
class Father(object):
DIR = '/var/php/'
def __up(self)
print('is father up')
pass
class Child(Father):
DIR = '/var/python/'
def __up(self)
print('is child up')
pass
子类定义与父类同名方法或属性,会自动覆盖父类对应的方法或属性
self
【永远是执行该方法的调用者】
class M(object):
def __init__(self):
pass
def __run(self):
pass
abc = M()
abc = M()
M这个类,通过实例化得到了abc这个对象,此时类中所有的self,都代表 abc 实例本身
__init__方法继承
class Fa(object):
PUBFILED = 911 # 静态属性 在类里边
def __init__(self):
print('Fa is init')
class Ga(Fa):
def __init__(self):
super(Ga, self).__init__()
b = Ga()
b 实例化 Ga ,Ga中的self就是对象b
init方法又继承了父类
b对象又把自己传给了 Fa 的init方法
这样就实现了子类调用父类的构造函数
多重继承
clas s DerivedClassName(Base1, Base2, Base3):
2.7 经典类,深度优先;新式类,广度优先
3.x 均是广度优先
封装
隐藏功能的实现细节,防止数据被随意修改
类 封装了: 静态属性和方法
对象 封装了:普通属性的值
多态
接口重用
继承和封装代码后,注意事项
class Fa(object):
age = 123
def __init__(self):
self.age = 333
def change_num(self):
print('Fa_change_num')
def fa_run(self):
print('Fa__run')
self.change_num()
class Fb(Fa):
def __init__(self):
super(Fb, self).__init__()
print(self.age)
def change_num(self):
print('Fb_change_num')
def fb_run(self):
print('Fb_run')
self.fa_run()
a = Fb()
a.fb_run()
结果
333
Fb_run
Fa__run
Fb_change_num
注意:这里 fa_run() 调用 change_num() 方法,得到的是 Fb_change_num() 方法