1、图解Python面向对象本章主讲内容 1.类对象的内存分析图 2.类对象所包含的内容 3.创建实例对象的执行过程 4.面向对象的三大特征 5.动态语言与静态语言之间关于多态的区别 6.特殊方法 7.对象的引用计数 类对象 Python中类的定义 对象的三个组成部分 标识 类型 值 属性 方法 内置函数dir()获得类对象或实例对象所有可以访问的属性或方法的列表class class PersonPerson(object(object):):pass pass 类对象的结构 类的结构 方法 实例方法 类方法 静态方法动态绑定属性和方法 Python是动态语言,在创建实例对象之后,可以动态的绑定
2、属性和或方法 特殊属性_slots可以提高属性的访问速度 访问实例对象的属性是通过访问实例对象的特殊属性_dict_来实现的 在类对象中定义了特殊属性_slots_,实例对象就不会再创建特殊属性_dict_ 因此在类对象中定义特殊属性_slots_可以减少内存消耗 动态绑定的属性和方法只能是_slots_中存在的字符串元素 重新_str_()方法,显示属性值创建实例对象的执行过程 自动调用特殊函数_new_创建对象 自动调用特殊函数_init_初始化实例对象的属性面向对象的三大特征 面向对象的三大特征面向对象的三大特征 封装:提高程序的安全性 继承:提高代码的复用性 多态:提高程序的扩展性和可
3、维护性 继继承的特性承的特性:多继承性和传递性 MROMRO全称为Method Resolution Order(方法解析顺序)它指的是对于一颗类继承树,当调用最底类对象所对应的实例对象的方法时,Python解释器在类继承树上搜索方法的顺序。可以通过最底层类对象的mro()方法或特殊属性_mro_去查看类的继承关系 封装 封封装:装:属性的私有化,但是Python没有明确的权限修饰符,完全靠程序员自觉,但是私有属性可以使用_开头,不希望被访问的方法也可以使用_定义 提供getter和setter方法对_定义的属性进行赋值和取值多态 多态:多态:简单地说,多态就是“具有多种形态”它指的是“即便不
4、知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态地决定调用哪个对象中的方法。如果子类不存在指定名称的方法,回到父类中去查找,如果在父类中找到了,则调用父类中的方法。静态语言和动态语言关于多态的区别 静态语言静态语言静态语言,实现多态有三个必要条件 1.继承 2.重写 3.父类类型的变量引用父类或子类类型的实例对象 动态语言动态语言动态语言的多态崇尚“鸭子类型”:当看到一只鸟走起来像鸭子、游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,我们并不关心对象是什么类型,到底是不是鸭子,只关心对象的行为。特殊方法
5、为什么两个整数或字符串可以相加?为什么字符串和列表可以调用内置函数len()获取字符串中字符的个数或列表中元素的个数?为什么字符串、列表、字典等可以使用for-in进行迭代呢?printprint(10+2010+20)printprint(lenlen(PythonPython)printprint(lenlen(1010,203203,3030)forfor i i in in PythonPython:printprint(i)(i)forfor key key in in aa:1 1,bb:2 2:printprint(key)(key)自定义类对象实列特殊方法 实现_add_()方
6、法,可以实现两个自定义类对象的实例对象之间的相加操作 实现_len_()方法,可以实现计算自定义对象的长度 实现_iter_()方法和_next_()方法可以实现自定义类对象的实例对象的的迭代遍历 对象的引用计数 对象引用加1的情况 对象赋值给变量 引用对象的变量赋值给另一个变量 对象作为容器(列表,集合)中的元素 对象作为函数调用时的实参 对象引用减1的情况 对象离开它的作用域,例如:对象所在的函数执行完毕 对象的引用被显示销毁 引用对象的变量被赋予新的对象 从容器中删除对象,或对象所在的容器被销毁 对象的引用计数 对象引用减1的情况 对象离开它的作用域,例如:对象所在的函数执行完毕 对象的引用被显示销毁 引用对象的变量被赋予新的对象 从容器中删除对象,或对象所在的容器被销毁本章主讲内容 1.类对象的内存分析图 2.类对象所包含的内容 3.创建实例对象的执行过程 4.面向对象的三大特征 5.动态语言与静态语言之间关于多态的区别 6.特殊方法 7.对象的引用计数