设为首页 收藏本站
查看: 1424|回复: 0

[经验分享] Python-面向对象编程

[复制链接]

尚未签到

发表于 2018-8-13 12:24:50 | 显示全部楼层 |阅读模式
   DSC0000.png
  一.编程范式
  1.面向过程编程
  面向过程把函数继续切分为子函数,来降低系统的复杂度。初学者容易接受,从上往下依次执行。
  2.面向对象编程(OOP) Object Oriented Programming  对函数进行分类和封装....
  面向对象编程——Object Oriented Programming,简称 OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
  3.面向函数编程(lisp)
  将某功能的代码封装为一个函数,使用时仅调用函数。
  (2+3)*2-1   jian(multi(add(2,3),2),1)
  二.基础概念
  
  1.类: 在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)。
  OOP首选思考的不是程序的执行流程,而是某个数据类型应该被视为一个对象,这个对象拥有的属性(Property)。
  
  2.object表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。
  class people:                         经典类
  class People(object):            新式类,object类是所有类的基类/父类
  3.实例(Instance)则是一个个具体的 Student;

  面向对象的抽象程度又比函数要高,因为一个>  - 创建实例的方式:student1 = Student()
  - 可以自由地给实例变量绑定属性,student1.name,student1.score;
  
  4.构造函数
  def __init__(self,name,age):     构造函数,当实例化对象时自动调用
  
  5.属性 self.name = name
  6.方法: 给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。

  Class 是一种抽象概念,比如我们定义的>  __init__ 方法的第一个参数永远是 self ,表示创建的实例本身;
  - 在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self ,并且调用时,不用传递该参数。
  - 可定义一个特殊的 __init__ 方法,在创建实例的时候,就把name , score等属性绑上去。
  7.析构函数
  删除实例化对象时自动调用;
  def __del__(self):
  print "deleteing......"
  
  8.子类
  class Student(People):                 Student是子类,继承People这个父类;
  注:以上例子见下面数据封装的图示
  三.面向对象的三个特性
  
  1.数据封装
  封装:把内容统一放在一个地方,看成一个整体,(实例化对象self和类的属性绑定在一起);
  - 访问封装内容的两种方式:
  通过self去访问封装的内容;(self.name)
  通过实例化的对象名去访问封装的内容;
DSC0001.png

DSC0002.png

  练习:
练习1:  创建一个类People,拥有的方法为砍柴,娶媳妇,回家;
  实例化对象,执行相应的方法
  显示如下:
  老李,18岁,男,开车去娶媳妇
  校思浩,22岁,男,上山去砍柴
  唐浩,10岁,男,辍学回家
  属性:name,age,gender
  方法:goHome(), kanChai(),quXiFu()
DSC0003.png

DSC0004.png

DSC0005.png

  2.继承
  继承性:子承父业,继承遗产.对于面向对象的继承来讲,就是将多个类共有的方法提取到父类中去,而子类只需要继承
  父类的方法,不需要一一实现每个方法;
  1.几个概念:子类(派生类)和父类(基类),经典类和新式类
  class D(object):  新式类
  class D:                   经典类
  (1)继承属性的第一种方法,不推荐
  如果父类名更改,此处也需要更改
DSC0006.png

  (2)继承属性的第一种方法super,推荐
DSC0007.png

  2.多继承
  - python的类可以继承多个,Java和C#只能单继承;
  - 继承多个类,有两种算法:深度优先算法和广度优先算法;
  - 类为经典类(class C:)时,多继承时使用深度优先算法;
  - 类为新式类(class C(C1,C2))时,多继承时使用广度优先算法;
  eg: D, C(D), B(D), A(B,C)
  深度优先:A->B->D->C
  广度优先: A->B->C->D
  3. 注意:类的方法中可以传递一个对象
  (1)新式类(优先同级) 优先在C类中找
DSC0008.png

  (2)新式类(优先同级) 优先在C类中找,C中没有再去D类中找
DSC0009.png

  (3)经典类(优先上级) 优先在B类中找,B中没有再去B类的上级D类中找
DSC00010.png

  (4)经典类(优先上级) 优先在B类中找,B中没有再去B类的上级D类中找,D类没有最后在到同级的C类中找
DSC00011.png

  3.多态
  就是多种表现形态的意思。它是一种机制、一种能力,而非某个关键字。它在类的继承中得以实现,在类的方法调用中得以体现。多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。
  - 如果子类调用的方法,子类没有,父类有,运行父类;
  - 如果子类调用的方法,子类有,父类也有,只运行子类的;
DSC00012.png

  
  四.将两个子类做关联
DSC00013.png

DSC00014.png

DSC00015.png

DSC00016.png

  五.访问限制
  在 Python 中,实例的变量名如果以 __ 开头,就变成了一个私有变量(private);
  当self.__age变为私有变量,等于_People__age    _People__age = self.__age DSC00017.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-551186-1-1.html 上篇帖子: python脚本之与mysql交互 下篇帖子: python安装Fabrix出现Command "python setup.py egg_info"错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表