类的定义
    使用class关键字定义个类,并且类名的首字母要大写; 当程序员需要创建的类型不能用简单类型表示时就需要创建类。
    类把需要的变量和函数组合在一起,这种包含也称之为封装。
    Python类的结构
    class 类名
    成员变量
    成员函数
    定义一个类:
    class Ren:
    name = “张三”
    sex = “男”
    high = “1.76”
    wight = “130kg”
    def run(self):
    print “跑步”
    对象的创建:
    创建对象的过程称之为实例化;当一个对象被创建后,包含三个方面的特性:对象 的句柄、属性和方法。
    句柄用于区分不同的对象 对象的属性和方法与类中的成员变量和成员函数对应
    if name==”main“: //自己调用执行以下代码,别人调用不执行以下代码
    myclass1=myclass() // 创建类的一个实例对象
    zhangsan = Ren() print zhangsan.name zhangsan.name=”张三” //设置属性
    zhangsan.money=100 //添加属性 print zhangsan.money
    Python对象的体系结构
    经典对象-内部由属性和方法组成,属性可以是数据类型也可以是函数类型,如属性 为函数则该属性就是一个方法。
    类的内部方法 Python类当中提供了一些内部方法,方法名由前后两个下划线加字幕 组成。
    例如Python的构造函数int.int前后均为 两个下划线。
    新型对象 定义新型对象,必须继承ojbjct方法class_name新型对象提供了对类方法和静态方法的支持
    类的属性:
    类由属性和方法组成,类的属性的对数据的封装,类的方法则是对类的行为的封装 。
    类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称
    公有属性:
    所有公有属性 就是在类中和类外调用的属性。
    私有属性:
    不能被类以外的函数调用 (可以公告instance._classname_attribute方式访问,但只用于调试程序)
    定义方法:
    以__双下划线开始的成员变量就是私有属性,否则是公有属性
    内置属性:由系统在定义类的时候默认添加的,由前后两个下划线构成 dict,name
    私有属性可以用类的方法调用
    run(self):
    print self.__name
    类的方法:
    方法的定义 和函数定义一样,但是需要self作为第一个参数 类方法也分为:公有方法和私有方法
    私有方法:不能被外部的类和方法调用,私有方法的定义和私有属性的定义都是一 样的,在方法的前面加上“__”双下划线就可以了
    类直接调用方法: 类方法:使用classmethod()函数处理过的函数,能被类所调用, 也能被对象所调用(是继承的关系);
    静态方法:相当于“全局函数”,可以被类直接调用,可以被所有实例化对象共享 ,通过staticmethod()定义静态方法没有self语句;
    self参数: 用于区分函数和类的方法(必须有一个self),self参数表示指向对象本身。
    在类中声明方法
    @classmethod //使用装饰器来调用类函数,
    动态方法
    def mo(self):
    print “世界末日”
    print Ren.mo()
    @staticmethod //声明静态函数,
    静态方法
    def mo():
    print “世界末日”
    re=statcmethod(mo)
    print Ren.re
    内部类
    所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界,
    内部类的举例: 汽车是个类,汽车的底盘,轮胎也可以抽象为类,将其定义到汽车类中,则形成内部类,更好的描述汽车类,因为底盘,轮胎是汽车的一部分。
    一般不赞同使用内部类,会使程序结构复杂,但是理解内部类有助于理解模块的调用。
    内部类的实例化方法
    方法1:直接使用外部类调用内部类:
    调用格式:
    object_name=outclass_name.inclass_name()
    outclass_name表示外部类的名称,
    inclass_name表示内部类的名称,
    object_name 表示内部类的实例
    方法2:先对外部类进行实例化。然后在实例化内部类
    调用格式:
    out_name=outclass_name()
    in_name=out_name.inclass_name()
    in_name.method() out_name()
    表示外部类的实例,in_name 表示内部类的实例
    构造函数和析构函数
    构造函数:
    用于初始化类的内部状态,Python提供的构造函数是int(); int()方法是可选的,如果不提供,Python会给出一个默认的int方法
    一般对数据的获取需要自定义的get和set方法
    class Ren():
    def init(self,x=’’):
    z=self.name=x
    print z
    zhang= Ren(‘张三’)
    析构函数
    户释放对象占用的资源,Python提供的析构函数是del(); del也是可选的,如果不提供则Python会在后台提供默认的析构函数
    如果要显示的调用析构函数,可以使用del关键字,方式如下:
    del 对象名
    def del(self):
    self.p.close()
    垃圾回收机制
    Python采用的垃圾回收机制来清理不在使用的对象;
    Python提供gc模块释放不再使用的对象 Python采用引用计数 的算法方式来处理回收
    即:当某个对象在其作用域内不在被其他对象引用的时候,Python 就自动清除对象;
    Python的函数collect()可以一次性收集所有待处理的对象 gc.collect()
    类的继承
    面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
    需要注意的地方:继承语法 class 派生类名(基类名)://… 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
    在python中继承中的一些特点:
    1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
    2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
    3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
    如果在继承元组中列了一个以上的类,那么它就被称作”多重继承” 。
    语法
    派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,
    如下所示:
    class SubClassName (ParentClass1[, ParentClass2, …]):
    ‘Optional class documentation string’
    class_suite