​详细代码理解可以参考

笨鸟教程博客:http://www.runoob.com/python3/python3-class.html


面向对象经常被提起,那到底什么是面向对象呢?

它的基本概念:类,对象、实例,属性,方法以及封装、继承、多态还有组合到底是什么呢?

对象可以是世间万物。

面向过程:它是以数据为中心,按照人的逻辑使用比如c语言代码 处理数据来完成任务的过程。

比如把大象放入冰箱内总共分三步:

第一步:打开冰箱门;

第二步:把大象放进冰箱;

第三部:关上冰箱门。

可以看出这个逻辑潜在的含义是这些事都有人来做,你或我或某某来打开冰箱门,来放入大象,来关上冰箱门。

面向对象:是不以人完成事件步骤为主线,而是将世间万物(对象,且是具有能动性的对象,具体来说就是包含数据特征即属性和能力即方法(或称函数))为主线,然后拼装对象属性及方法来完成任务。

还是把大象放入冰箱内。

此时可以以冰箱为对象,冰箱具有开门关门的数据(可以用0表示关门,1表示开门)即属性。可以有开门关门的能力即方法(方法也称函数)。这样把大象放入冰箱就不是人去打开冰箱了,冰箱就相当于自动冰箱了,会开关门。人也可以看做是对象,有放大象进冰箱的方法。

以上的冰箱和人都是对象,那什么是实例呢?

对象是抽象的概括的集合,像马这个概念一样,你找不到一个既黑又白既胖又瘦的马,但你能找到白色的那头马,黑色的那头马,但这些马又都属于上面那个概念马。所以对象是抽象的概念,实例就是具体化的对象。冰箱若是对象,那他的实例可以是海尔冰箱,可以是格力冰箱(不知道格力有没有冰箱)等。

那属性是什么呢:

属性其实是数据。方法其实是函数。类就是那个抽象的对象。

对象的属性存在于类的内部,但在类的方法外。

实例的属性放在类内部方法内或类外的实例下。分为私有和非私有属性。私有实例属性以双下划线开头,只能定义在类内,在类外无法访问到,即使你用 实例.__私有属性 进行访问也仅是在类外建立了一个实例下的属性。因为类内的私有属性一旦建立,python会在后台给这个私有的实例属性(当然在类内定义的,类外也无法建立)改名。所以你在实例中是无法访问到类内的实例属性的。其中self代表的就是实例的意思。

  1. #这是注释行
  2. #下面是类内
  3. class 1
  4. 类属性1=1 #类属性定义在类内,类方法外
  5. 类属性2=2
  6. __类属性3="Tom" #
  7. def __init__(self,a1,b1): #a,b 是实例1传进来的参数,这是一个特殊的类方法,被称为构造函数,一旦这个类1被创建一个实例会在后台自动调用这个类构造方法。
  8. self.实例属性1=a1 #定义了一个实例属性
  9. self.__实例属性2=b1 #双下划线开头定义了一个私有的实例属性, 它在类外访问不到,定义好后python会把这个私有实例属性在后台改名
  10. def 方法1(self):
  11. self.实例属性1=1
  12. self.实例属性2=2
  13.  
  14. def 方法2(self):
  15. self.实例属性1=1
  16. self.实例属性2=2
  17. print('和为',self.实例属性1+self.实例属性2) #在类内使用实例属性
  18. print('类1的类属性1:',类1.类属性1,'类1的类属性2:',类1.类属性2,) #类内使用类属性,不管是类内还是类外,使用类属性都是 类名.类属性名
  19.  
  20. #下面是类外
  21. if __name__=='__main__':
  22. 实例1=类1(a,b)#类相当于一个模子,这个实例具有了这个类的所有非私有属性和方法。
  23. print('实例1.实例属性1') #类外使用实例属性,这个实例属性1是构造函数中的实例属性1,方法1和方法2中的实例属性还不能用,因为还没有调用这些方法,所有那些方法下的实例属
  24. #性不能用,但构造函数在由类创建实例时已经被自动调用
  25. 1.类属性2=4 #可以在类外修改类属性,此后所有实例继承的此类属性值全部改变。
  26. 实例1.__实例属性2=3 #此处试图改变私有实例属性,私有实例属性无法在类外访问,故此处相当于不合潜规则的新建了一个类外实例属性,虽然不报错,但一般不这么做
  27. 实例1.实例属性5=5 #可以这么用,这是在实例下创建了一个实例属性
  28. 实例1.方法2() #这是在类外调用类方法,self是默认形参数,实参可以没有,故此处方法2参数没写。

怕您看不清,下面把图奉上:

对象存在于问题分析阶段,转化到代码时定义的这个对象就被称为类了。

python面向对象开发的自我理解的更多相关文章

  1. python Web开发你要理解的WSGI & uwsgi详解

    原文:https://www.jb51.net/article/144852.htm WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,W ...

  2. 【python测试开发栈】—理解python深拷贝与浅拷贝的区别

    内存的浅拷贝和深拷贝是面试时经常被问到的问题,如果不能理解其本质原理,有可能会答非所问,给面试官留下不好的印象.另外,理解浅拷贝和深拷贝的原理,还可以帮助我们理解Python内存机制.这篇文章将会通过 ...

  3. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  4. 【转】python面向对象中的元类

    type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello.py模块: class Hel ...

  5. Python面向对象的高级编程

    数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ ...

  6. Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)

    Python 面向对象(初级篇)   51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...

  7. Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)

    Python开发[第七篇]:面向对象   详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇)   上一篇<Python 面向对象(初级篇)> ...

  8. python 面向对象终极进阶之开发流程

    好了,你现在会了面向对象的各种语法了,  但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...

  9. 新手如何理解JS面向对象开发?

    今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也 ...

随机推荐

  1. Winform-图片上传

    1.界面上拖个.pictureBox(pictureBox1) //上传点击按钮 private void button1_Click(object sender, EventArgs e) { Op ...

  2. vue深入了解组件——处理边界情况

    一.访问元素&组件 在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作DOM元素.不过也确实在一些情况下做这些事情是合适的. 1.1 访问根实例 在每个 new Vue 实例的子组 ...

  3. linux系统安装中文支持,解决中文乱码问题

    怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导 ...

  4. dstat 性能监测工具

    dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品.dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了.dstat可 ...

  5. TPCC-MySQL的安装与使用

    Tpcc-mysql 是 percona 基于 tpcc 衍生出来的产品,专用于 mysql 基准测试,其源码放在 bazaar 上( Bazaar 是一个分布式的版本控制系统,采用 GPL 许可协议 ...

  6. OPTION SQL_SELECT_LIMIT=DEFAULT'

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version ...

  7. C#累加器函数Aggregate用法 讲解

    Enumerable.Aggregate 扩展方法在System.Linq命名空间中,是Enumerable类的第一个方法(按字母顺序排名),但确是Enumerable里面相对复杂的方法. MSDN对 ...

  8. oracle 网络环境配置

    PLSQL Developer连接Oracle11g 64位数据库配置详解 最近换了台64bit的电脑,所以oracle数据库也跟着换成了64bit的,不过 问题也随之产生,由于plsql devel ...

  9. centos7 /etc/profile /etc/bashrc

    在/etc/profile中添加环境变量后,是使用source /etc/profile编译后只能在当前终端生效 重新开启一个终端后,该环境变量失效. 解决方法: 重启系统:reboot,问题解决 环 ...

  10. Mysql update 索引

    执行mysql update,或者delete的时候会遇到: You can't specify target table for update in FROM clause 相关的原因自不必说:下面 ...