面向对象>>类(三大特性:继承多态封装)>>反射,内置函数/方法,

类(class): 具有相同属性和方法的对象的集合. 对象是类的实例 
两种属性:  1,静态变量.
                   2,方法, 函数
类的操作:
    创建类:  使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
    类名角度: 操作静态字段: 1, 查询类中的全部属性   .__dict__
                                           2, 万能的点 .    可以进行 增删改查                       
    对象角度: 操作静态字: 操作类中的方法(除了类方法,静态方法 需要类名调用之外,剩下的方法都要对象调用)    
对象实例化过程:        
        1, 创建了一个对象空间,实例空间,含有一个类对象指针.
        2, 并将我的对象空间传给self,自动执行__init__方法.
        3, 将这个对象的空间返回给调用者.
组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.
>>>>>------------------------------------------------------------------------------------
 
 
一,
父类又称为基类,超类,          子类又称为派生类
继承: 子类中实现父类的方法
     继承的意义: 1, 优化代码, 节省代码
                          2, 提高代码复用性.
                          3, 提高代码的维护性
                          4, 让类与类之间发生关系                     
                        (ps: 组合: 让对象与对象发生关系)
    单继承: 新式类和经典类一样.
    多继承:
                新式类(继承object类的): 广度优先      类名 . mro() 查询继承顺序
                经典类(不含有object的): 深度优先
 
二,
抽象类, 接口类:  python 没有这两个概念
目的是制定一个规范,需要引入abc模块, 为了实现归一化设计
例子有 微信支付宝京东支付功能中,强制含有统一的pay方法
 
三,
多态是Java定义的名词
python是弱类型语言,没有具体的多态,处处是多态,但是有鸭子类型 : 
        例如: 不同的内置函数中有相同的方法,这些类就互称为鸭子
四,
封装,私有化,
广义的封装: 实例化一对象,给对象空间封装一些属性.
狭义的封装: 私有制   在静态变量或者方法前面加上 __ (两段下划线)就可以化为私有(本质是在变量或方法名前加上"_类名")
                    私有成员:静态私有字段, 静态私有方法, 静态私有对象属性
                    私有静态字段/方法,只有在类的内部可以访问   
                    在类的外部不能调用 访问,在子类中不能访问
五,
属性:  @property   声明
将方法伪装成一个属性,在代码的级别上没有本质的提升但是看起来更合理
            @属性名. setter     更改返回值
            @属性名. deleter   删除属性
六,
@classmethod
类方法: 通过类名调用的方法, 类方法中的一个参数约定成俗称cls, python自动将类名(类空间)传给cls, 可以用点进行各种操作.
使用场景:
1, 无需对象参与. 
2, 对类中的静态变量进行修改.
3, 在父类中 通过类方法得到子类的类空间,进行所有操作.
 
静态方法:
@staticmethod   声明一个 静态方法
1, 形成代码块, 条理更清晰
2, 提高代码复用性,  (通过类的继承)
内置函数:    
    isinstance(对象名,类名) 判断对象所属类型,包括继承关系
    issubclass(子类名, 基类名) 判断类与类之间的继承关系
什么是反射?
    用字符串数据类型的变量名来访问这个变量的值
反射的方法: getattr[调用方法]     hasattr[判断属性/方法是否在类或模块中] 
                     setattr[类名,"属性","重命名"]   delattr[删除属性/方法]
反射在面向对象中的应用:  查看属性, 调用方法
    命名空间.属性/方法 = getattr(命名空间, "属性/方法")
反射在模块中的应用:
    模块名. 方法 = getattr(模块名,"方法")
内置方法:    又叫 双下方法, 魔术方法.    结构 : __方法名__   类中的双下方法 没有 需要你在外部直接调用的, 而是自动触发的
    __call__  相当于   对象()
    __new__  开辟内存空间的类的构造方法
    __len__  =  len( obj )    属性中含有__len__的数据类型才可以计算长度
    __init__初始化方法封装对象属性
    __str__  返回对obj的描述
            print一个对象相当于调用一个对象的__str__方法
            str(obj),相当于执行obj.__str__方法
            '%s'%obj,相当于执行obj.__str__方法
 
 
 
 
posted @ 2016-07-30 19:50  small宙斯  阅读(137)  评论(0编辑  收藏  举报