初识python面向对象编程
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.面向过程的程序设计思想
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 """ 8 1>.核心是: 9 a>.过程,过程就是流程。 10 2>.优点: 11 a>.思路清晰; 12 b>.复杂的问题简单化(极大的降低了程序的复杂度); 13 c>.流程化; 14 3>.缺点: 15 a>.扩展性差; 16 4>.应用(对扩展要求不高的场景): 17 a>.Linux内核; 18 b>.httpd; 19 c>.git; 20 """
1 #/usr/bin/env pytho05*-9n 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 def person(name,level,life_value): 8 def attack(): 9 print('%s 在攻击' %p_dic['name']) 10 p_dic = { 11 'name':name, 12 'level':level, 13 'life_value':life_value, 14 'attack':attack 15 } 16 return p_dic 17 18 def dog(name,breed,live_value): 19 def bite(): 20 print('%s 在咬' % d_dic['name']) 21 d_dic = { 22 'name':name, 23 'breed':breed, 24 'live_value':live_value, 25 'bite':bite 26 } 27 return d_dic 28 29 30 #实例化过程,即从“person”到“p1”的过程,从“dog”到“d1”的过程。 31 p1 = person('superman',1,1000) #“p1”是对象,我们也称之为“实例” 32 d1 = dog('旺财','哈士奇',5000000) #“d1”和“p1”同理,即也是对象和实例。 33 34 35 p1['attack']() 36 d1['bite']() 37 38 39 40 41 #以上代码执行结果如下: 42 superman 在攻击 43 旺财 在咬
二.什么是面向对象编程
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 """ 8 1>.核心是: 9 a>.对象,即上帝式思维(要理解对象为何物,必须把自己当上帝,上帝眼里时间存在的万物皆为对象,不存在的也可以创造出来。) 10 2>.优点 11 a>.解决了程序的扩展性(如修改一个角色的属性,比如修改王者荣耀的妲己的属性); 12 b>.数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰; 13 c>.通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度; 14 d>.结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程; 15 e>.通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度; 16 f>.以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统; 17 g>.通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。 18 19 3>.缺点 20 a>.可控性差,无法像面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就会有对象 21 之间的交互解决问题已,就比如前两年比较火的英雄联盟。我还记得有一个英雄叫“亚索”,由于他的某些技能的改动导致在泉水就可以拿五杀。 22 23 4>.应用场景 24 a>.需求进程变化的软件; 25 b>.一般需求的变化都集中在用户层; 26 c>.互联网应用; 27 d>企业内部软件; 28 e>.游戏等都是面向对象的程序设计大显身手的好地方;. 29 """
注意,面向过程的程序设计并不是全部。对于一个软件质量来说,面向对象的程序设计只是用来解决扩展性。
三.类与对象的概念
1>.对象是特征与技能的结合体,在程序中特征以变量的形式表示,而技能则以函数的形式表示;
2>.从一组对象中提取相似的部分就是类,类是所有对象都具有的特征和技能的结合体,而类是一些列对象共同的特征与技能的结合体;
3>.在Python中,用变量表示特征,用函数表示技能,因而类是变量与函数的结合体,对象是变量与方法(指向类的函数)的结合体;
四.
五.
六.
七.
八.
九.