面向对象变成介绍

面向过程编程

核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。主要应用在一旦完成很少修改的地方,如linux内核、git、apache服务器等

优点:极大的降低了程序的设计复杂度

缺点:可扩展性差,改动一个地方很可能要改多个地方,牵一发而动全身

面向对象编程:不是编程的全部,只是用来解决软件可扩展性的

核心是对象(上帝式思维),对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象就是把计算机程序作为一个对象集合,每隔对象都能接收其他对象传来的消息,计算机程序的执行就是就是一系列消息在各个对象之间传递。主要应用在需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等

优点:解决了程序的可扩展性差的问题,对某一个对象修改会立刻反映到整个程序体系,如lol对一个英雄属性的修改(万年削弱从未被加强)

缺点:可控性差,无法预测程序执行结果,如lol每局游戏的结果

类和对象

对象的概念

对象也叫做实例,是通过类产生的,对象就是数据属性和方法属性的结合体,比如lol中的英雄,一个英雄就是一个对象,具备生命值、蓝条攻击力等数据属性,又具备qwer四个技能属于方法属性。

类的概念

类包含了一组对象的相同属性部分,还是说lol中的英雄,所有的英雄都有名字、标签(坦克战士法师)、生命值、蓝条攻击力等,虽然具体的值不同,但是都可以包含在类中去生成。

在python中,用变量表示是数据属性,用函数表示方法属性。

在现实生活中,先有对象后有类,比如先有的人,后有的人类的概念,而在编程中,是先有的类,后有的对象,类生成对象。

声明一个类:和函数的定义类似

定义函数:通过def关键字

1 deffunctionName(args):2 '函数文档字符串'

3 函数体

定义类:通过cless关键字,类的名字一般开头大写,为了和函数区分

1 '''

2 class 类名:3 '类的文档字符串'4 类体5 '''

6 #我们创建一个类Data类,

7 classData:8 pass

示例:定义一个中国人的类

首先分析中国人的特征,首先国籍必须是属于中国,然后还要是个人,那么人都会做什么(吃喝拉撒睡说话)等等,另外每个人还有自己特有的属性,比如名字身高生日等

伪代码分析(只是分析):

chinese#例如共有属性有

country='china' #国籍中国

language='chinese' #语言为中文,地方语言、少数民族语言可列为特有属性#会的技能

deftalk(self):print('is talking')defeat(self):print('is eating')defsleep(self):print('is eating')defwork(self):print('is working')#等一系列人类含有的技能

#特有属性

name=name

age=age

sex=sex

代码定义:__init__函数和self会在下面说明

1 classChinese:2 #共同的特征:国籍和语言

3 country = 'China'

4 language = 'chinese'

5 #__init__(p1, 'zhangsan', 'man', 73)

6 def __init__(self,name,sex,age):7 #只用于初始化的活,不能有返回值,用于定义特有的属性

8 self.name=name #p1.name='zhangsan'

9 self.sex=sex #p1.sex='man'

10 self.age=age #p1.age=73

11 #共同的技能

12 deftalk(self):13 print('is talking')14 defeat(self):15 print('is eating')16 defsleep(self):17 print('is eating')18 defwork(self):19 print('is working')

类的属性引用:

1 print(Chinese.__dict__) #以字典的方式返回Chinese的所有属性,或者用dir(类名)查询

2 print(Chinese.language) #查看Chinese的language属性

3 print(Chinese.work) #查看Chinese的work属性

4 Chinese.language='putonghua' #修改类的language属性

5 Chinese.complexion='yellow' #增加一条肤色属性

6 del Chinese.complexion #删除肤色属性

实例化(生成实例):__init__函数和self说明

1 p1=Chinese('zhangsan','man',73) #生成一个实例,name='zhangsan' sex='man' age=73

2 print(p1.__dict__) #以字典的方式返回p1的属性,不包含类的共同属性,只有name/sex/age

类名加上括号就是一个实例化的过程,以上生成了一个叫做p1的对象

1 print(p1.__dict__,type(p1))2 #输出结果为

3 {'name': 'zhangsan', 'sex': 'man', 'age': 73}

p1.__dict__输出的结果为__init__函数所执行后的结果,而__init__函数的位置参数有四个self,name,sex,age,实例化的过程中传入了'zhangsan','man',73三个参数对应name,sex,age,而self也是一个位置参数,函数部分我们知道位置参数必须要传入值,这里代码自动会把值p1传入,也就是实例的名字p1。

而p1的类型为,如果查看Chinese的类型会发现和p1的一样,也就是说定义一个类也就是定义了一个类型。

对象的属性引用:

1 print(p1.language) #p1本身并没有language属性,但是可以查到,自己本身虽然没有,但是从类里可以拿到

2 #print(p1.run()) #报错,因为自己和类里都没有这个属性

3 print(p1.work())4 p1.city='beijing' #增加一条属性,只是针对与对象本身,会增加到p1的属性字典里,不会对Chinese有影响

5 del p1.city #删除一条属性

结论:

类的数据属性可以增删查改

对象的数据属性可以增删查改

对象本身并没有函数属性,只有自有的数据属性(__init__函数初始化的属性或者手动添加的属性),但是可以通过类调用到,也就是共有的特征和属性

对象里通用的数据和函数是引用类的名称空间

对象的属性,优先从自己的__dict__字典里找,如果自己的字典里没有,访问类里的,如果类里也没有,报错,自己定义的属性对其他引用了类的相同属性没有影响

对象的用法:

classChinese:

obj_list=[]

count=0

country= 'China'language= 'chinese'

def __init__(self,name,sex,age):

self.name=name

self.sex=sex

self.age=age

self.obj_list.append(name)  #每次实例化,实例都往pbj_list中添加一个名字

self.count+=1          #每次实例化,实例都将count+1

defsleep(self):print('is eating')defwork(self):print('is working')

p1=Chinese('bob','man',18)

p2=Chinese('natasha','woman',28)

p3=Chinese('hurry','man',10)print(p1.obj_list,p1.__dict__)print(p2.obj_list,p2.__dict__)print(p3.obj_list,p3.__dict__)print(Chinese.obj_list)#######分割线君#######

print(p1.count,id(p1.count))print(p2.count,id(p2.count))print(p3.count,id(p3.count))print(Chinese.count,id(Chinese.count))

输出结果:

['bob', 'natasha', 'hurry'] {'name': 'bob', 'sex': 'man', 'age': 18, 'count': 1}

['bob', 'natasha', 'hurry'] {'name': 'natasha', 'sex': 'woman', 'age': 28, 'count': 1}

['bob', 'natasha', 'hurry'] {'name': 'hurry', 'sex': 'man', 'age': 10, 'count': 1}

['bob', 'natasha', 'hurry']1 1818604608

1 1818604608

1 181860460801818604576

结果发现:每个实例都没有obj_list,但是却有count,一个是可变,一个是不可变,所以类里可变的数据obj_list可以直接被修改,内存id不会改变,而不可变的数据count只能被重新计算,开辟新的内存空间进行引用,是建立在对象的属性中,而非类的属性

1 classChinese:2 obj_list=[]3 count=04 country = 'China'

5 language = 'chinese'

6 def __init__(self,name,sex,age):7 self.name=name8 self.sex=sex9 self.age=age10 Chinese.obj_list.append(name)  #每次实例化,Chinese类都往obj_list中添加一个实例名字11 Chinese.count+=1    #每次实例化,Chinese都将count+1

12 defsleep(self):13 print('is eating')14 defwork(self):15 print('is working')16 p1=Chinese('bob','man',18)17 p2=Chinese('natasha','woman',28)18 p3=Chinese('hurry','man',10)19 print(p1.obj_list,p1.__dict__)20 print(p2.obj_list,p2.__dict__)21 print(p3.obj_list,p3.__dict__)22 print(Chinese.obj_list)23 #######分割线君#######

24 print(p1.count,id(p1.count))25 print(p2.count,id(p2.count))26 print(p3.count,id(p3.count))27 print(Chinese.count,id(Chinese.count))28

29 输出结果30 ['bob', 'natasha', 'hurry'] {'name': 'bob', 'sex': 'man', 'age': 18}31 ['bob', 'natasha', 'hurry'] {'name': 'natasha', 'sex': 'woman', 'age': 28}32 ['bob', 'natasha', 'hurry'] {'name': 'hurry', 'sex': 'man', 'age': 10}33 ['bob', 'natasha', 'hurry']34 3 1818604672

35 3 1818604672

36 3 1818604672

37 3 1818604672

结果发现:在实例化的过程中,类本身做的属性修改操作,不会对对象造成任何影响,所有的对象都不包含count属性和obj_list属性,都是通过类去调用的。

1 classChinese:2 country = 'China'

3 language = 'chinese'

4 def __init__(self,name,sex,age):5 self.name=name6 self.sex=sex7 self.age=age8 defsleep(self):9 print('%s is eating' %self.name)10 defwork(self):11 print('%s is working' %self.name)12 p1=Chinese('bob','man',18)13 p2=Chinese('natasha','woman',28)14 #Chinese.work() #抛出TypeError

15 p1.work()16 p2.work()17 #输出结果

18 bob isworking19 natasha is working

结果发现:类里面定义的函数只是给对象用的,类本身无法使用这些函数。类定义的只是方法,而方法是给对象绑定的

python类和对象介绍_Python开发基础-Day17面向对象编程介绍、类和对象相关推荐

  1. python在线投票系统讲解_Python开发基础-项目实训-在线投票系统ppt课件

    <Python开发基础-项目实训-在线投票系统ppt课件>由会员分享,可在线阅读,更多相关<Python开发基础-项目实训-在线投票系统ppt课件(27页珍藏版)>请在人人文库 ...

  2. python创建对象的格式为_Python入门基础学习(面向对象)

    python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  3. 前端与移动开发----JS高级----面向对象编程,类与实例对象,继承,严格模式,模板字符串,class封装tab栏

    JS高级01 回顾上阶段 Javascript组成 ECMAScript: 基础语法 (变量, 表达式, 循环, 判断, 函数, 对象等) DOM: document 操作标签(获取, 增加, 插入, ...

  4. python django flask介绍_Python开发WEB框架Flask详细介绍

    Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...

  5. python面向对象语言_Python语言基础之——面向对象编程

    1.类属性 1)类属性: 直接定义在类中的变量是类属性 类属性的值不会因为对象不同而不一样 2)对象属性 通过 self.属性名 = 值 定义在init函数中的属性 对象属性的值会因为对象不同而不一样 ...

  6. 第二章(1):Python入门:语法基础、面向对象编程和常用库介绍

    第二章(1):Python入门:语法基础.面向对象编程和常用库介绍 目录 第二章(1):Python入门:语法基础.面向对象编程和常用库介绍 1. Python 简介 1.1 Python 是什么? ...

  7. python面向对象简介_python(23)- 面向对象简单介绍

    面向概述 面向过程:根据业务逻辑从上到下写垒代码 面向过程的设计的核心是过程,过程即解决问题的步骤, 面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点:极大降低了程序的复杂 ...

  8. python面向对象编程从零开始_Python面向对象编程从零开始,从没对象到有对象

    原标题:Python面向对象编程从零开始,从没对象到有对象 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智 ...

  9. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

最新文章

  1. 2021年4月28日 深圳头条后台开发实习面试(hr面)
  2. 卷积神经网络(CNN)的原理
  3. [Linux] PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
  4. python自动化框架pytest接口关联串联_基于python接口自动化框架搭建_pytest+jenkins+allure...
  5. 【 数字信号处理 】定点数的表示之二进制数的原码与补码
  6. 单帧风景照变延时摄影,分分钟搞定,还能有昼夜变化,这是来自日本的开源动画景观算法...
  7. 17、mybatis两个内置参数
  8. ajax请求相关问题
  9. Google-Guava-EventBus源码解读
  10. 华为谷歌互利合作曝光:或将推Nexus手表
  11. idea内存溢出解决_各种OOM代码样例及解决方法
  12. RESTful开发风格
  13. 输入流控制:几种清除输入流中空格或回车的常用函数
  14. python商业爬虫学徒计划_(教程)下载:麻瓜编程Python商业爬虫学徒计划麻瓜编程的视频python办公自动化麻瓜...
  15. 1/4-36UNS-2A的螺纹
  16. windows聚焦壁纸不更新_锁屏壁纸windows聚焦不更新?
  17. 如何从CDN加载jQuery
  18. 【自动驾驶】高级驾驶辅助系统(ADAS)
  19. 【读书笔记】《互联网企业安全高级指南(赵彦等)》
  20. 【单片机基础篇】 人体红外感应传感器模块

热门文章

  1. sublime设置空格替换tab键
  2. freeswitch 安装 fail2ban 动态拦截IP攻击
  3. Pyinstaller打包: 将资源文件或文件夹打包到最后生成的exe中
  4. Python使用Tornado+Redis维护ADSL拨号服务器代理池
  5. 将下载都是大写字母的网页里面的html转换为小写的简单方式
  6. C#开发终端式短信的原理和方法 .
  7. [错误总结]升级spring-boot->2.6.2|hiberate->5.4.33.Final|spring cloud->2021.0.0 |spring admin->2.4.1
  8. python基础教程运行程序_Python入门基础教程:WSGI
  9. 贪心法——区间覆盖问题
  10. 小程序 - 参考数据 - ASC字符码表和常用的中文字符编码表