面向对象_基本概念(2)

来源:互联网 发布:nginx 跳转到指定ip 编辑:程序博客网 时间:2024/06/05 23:35

类的继承

  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() 方法