Python进阶(十三)----面向对象

一丶面向过程编程vs函数式编程vs面向对象编程

面向过程:

​ 简而言之,step by step 一步一步完成功能,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.

  1. ### 来自百度百科
  2. 面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。比如拿学生早上起来这件事说明面向过程,粗略的可以将过程拟为:
  3. (1)起床
  4. (2)穿衣
  5. (3)洗脸刷牙
  6. (4)去学校
  7. 而这4步就是一步一步地完成,它的顺序很重要,你只需要一个一个地实现就行了。
  8. # C语言就是面向过程,虽然缺点很多,但是面向过程是编程的一种重要思想.C语言也算是其他更高级语言的'鼻祖'

函数式编程:

  1. ### 来自百度百科
  2. 函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)
  3. # 简易理解: 函数式编程也是面向过程,函数式编程是极其简化的封装一个功能或一个动作, 由函数名+()去调用执行.减少代码的重复,对要完成的功能思路清晰.
  4. 优点:
  5. 代码简洁,开发快速
  6. 接近自然语言,易于理解
  7. 更方便的代码管理
  8. 易于"并发编程"
  9. 代码的热升级
  10. 缺点:
  11. 严重占用计算机资源
  12. # 常见的函数式语言: scale python

面向对象:

  1. ### 来自百度百科
  2. 面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
  3. #简易理解:
  4. 1. 面向对象三大特性:封装(对相似功能的集合操作),继承(提高代码的重复利用),多态(复杂~~)
  5. 2. 万物皆'对象'
  6. 3. 类:一个共享相同结构和行为的对象的集合
  7. #优缺点:
  8. 优点:易维护、易复用、易扩展,可使系统更加灵活、更加易于维护
  9.    缺点:性能比面向过程低,

二丶面向对象的结构

  1. # class 关键字 , 类名(采用驼峰命名,首字母大写)
  2. class Student: # 类是相似功能的集合体.
  3. daily = '学习' # 静态属性,属性
  4. examination = '考试' # 静态属性,属性
  5. def work(self): # 方法 ,self是位置参数
  6. print('每天要上课')
  7. def homework(self):
  8. print('家庭作业')
  9. s1=Student() # s1就是对象,类的具体体现.

三丶从类名的角度使用类

  1. class Student:
  2. '''
  3. 备注信息
  4. '''
  5. daily='学习' # 变量( 之前 ) 静态属性,属性
  6. exam='考试'
  7. def work(self): # 函数(之前) 方法,动态方法
  8. print('上课了')
  9. def homework(self):
  10. print('做作业了')
  11. ### 类名角度 : 调用 类中的属性
  12. # 1.查看类中所有的内容 , 类名.__dict__ 只用于获取类中的全部
  13. print(Student.__dict__)
  14. # 2. 查看类中单个内容, 类名.属性名
  15. print(Student.daily) # 查看静态属性
  16. Student.cloth='校服' # 增加静态属性
  17. Student.exam='大手大脚三' # 修改静态属性
  18. del Student.exam # 删除静态属性
  19. print(Student.__dict__)
  20. ### 类名调用类中的方法
  21. Student.homework('moja') #这里必须传参数, 因为homework方法中有self位置参数存在
  22. # 一般类中的属性都是通过类名.的方式去操作

四丶实例化一个对象

  1. # -*-coding:utf-8-*-
  2. # Author:Ds
  3. class Student:
  4. '''
  5. 备注信息
  6. '''
  7. daily = '学习' # 变量( 之前 ) 静态属性,属性
  8. exam = '考试'
  9. def __init__(self,name,age,sex): # 就是构造方法, 用于接收参数, 给对象设置对象空间的属性
  10. self.name=name
  11. self.age=age
  12. self.sex=sex
  13. def work(self,color): # 函数(之前) 方法,动态方法
  14. self.color=color
  15. print(f'{self.name} 上课了')
  16. def homework(self):
  17. print('做作业了')
  18. stObj1=Student() # 类名() 过程就叫实例化过程,实例化一个对象
  19. stObj2=Student() # 类名() 过程就叫实例化过程,实例化一个对象
  20. print(stObj1) # 对象,实例 <__main__.Student object at 0x000001E6DF2E9DD8>
  21. print(stObj2) # 对象,实例 <__main__.Student object at 0x000001E6DF2E9DD8>
  22. #### 实例化一个对象时,发生了三件事情
  23. # 1. 在类名+()执行时,会在内存中创建一个以对象命名名称空间
  24. # 2. 自动执行__init__方法 ,并且将对象空间传给self
  25. # 3. 执行__init__方法的代码,给对象封装其属性
  26. ### 从对象角度研究类:
  27. # 对象操作对象里面的属性
  28. obj=Student()
  29. print(obj) # 对象的内存地址, 对象会在内存创建一个以obj为名的内存空间
  30. #对象查看全部属性
  31. print(obj.__dict__)
  32. #对象可以操作对象空间的属性
  33. obj.age='12' # 增, 在以obj为名的内存空间中,添加一个age属性
  34. obj.name='bl' # 增, 在以obj为名的内存空间中,添加一个name属性
  35. print(obj.__dict__)
  36. del obj.name # 删除, 删除是obj名称空间内的name属性
  37. obj.age='2321' # 改 , 修改的是obj名称空间内的age属性
  38. print(obj.__dict__) # 查看 , obj名称空间的全部属性,以字典的形式
  39. ### 对象 查看类中的属性
  40. mc=Student()
  41. print(mc.exam) # 对象, 查看/获取类中的静态属性,不能修改和删除
  42. ### 对象调用类中的方法
  43. mc=Student('小黑',33,'弟弟')
  44. mc.work('绿色') # work方法 , 是对象具有某一功能的具体方法. 简称:对象方法
  45. print(mc.__dict__)

对象生成时,经历的三件事情

五丶什么是self?

​ self 就是类中方法的第一个位置参数 ,

​ 如果通过对象执行此方法,解释器就会自动的将此对象空间当做实参传给self

Python进阶(十三)----面向对象的更多相关文章

  1. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  2. Python进阶之面向对象编程

    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  3. Python进阶之面向对象编程(二)

    Python面向对象编程(二) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  4. Python进阶之面向对象编程概述

    Python面向对象编程(一) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  5. Python 进阶_OOP 面向对象编程_组合与继承

    #目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...

  6. Python进阶-XIV 面向对象初步

    1.面向对象的引入 def Person(*args): ''' 定义一个人 :param args: 人的属性 :return: 人的所有属性的字典 ''' info = {} info['name ...

  7. Python进阶之面向对象

    新式类与旧式类 区别: 在2.2版本之前所有的类都是旧式类,3.x版本已取消旧式类 旧式类一般的写法,不继承任何父类 class Person: def __init__(self, name): s ...

  8. Python进阶编程 面向对象

    一.面向对象 1.1面向对象的基本格式 class 类名: def 方法名(self): print(123) return 123 def 方法名(self): print(123) return ...

  9. Python 进阶_OOP 面向对象编程_self 的实例绑定

    目录 目录 self 和绑定 调用非绑定的方法 self 和绑定 在 Python 中 self 变量是特殊的, 其用于在实例方法中引用该方法所绑定的实例, 换句话说就是 Python 在实例化对象时 ...

随机推荐

  1. [BUAA软工]Alpha阶段测试报告

    测试报告 一.测试计划 1.1 功能测试 1.2 UI测试 1.3 测试中发现的bug https://github.com/bingduoduo1/backend/issues/21 https:/ ...

  2. 记一次netty http server给客户端返回reset包排除

    类似文章:解决用netty去做web服务时,post长度过大的问题 现象:当客户端给server发送的请求体较大时,服务直接给客户端返回reset包. tcpdump: 应用还没有完全收上去,就clo ...

  3. linux 下查看redis是否启动

    make make PREFIX=/usr/local/redis install mkdir /etc/redis/ cp redis.conf /etc/redis/ 打开redis.conf文件 ...

  4. Android Sensor 架构深入剖析【转】

    本文转载自: 1.Android sensor架构 Android4.0系统内置对传感器的支持达13种,它们分别是:加速度传感器 (accelerometer).磁力传感器(magnetic fiel ...

  5. android x86 固件定制

    测试提了几个bug 1.系统语言默认设置成中文,否则时间控件显示的内容有问题 2.关闭10分钟不操作自动休眠功能 3.默认关闭虚拟键盘,目的在文本控件点击后,虚拟键盘就会在右下角显示出来,导致物理键盘 ...

  6. MySQL索引原理(二)

    MySQL索引原理 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中.索引是数据库中专门用于帮助用户快速查询数据的一种数据结构. ...

  7. Android Studio的下载、安装与配置

    1 下载 下载地址:http://www.android-studio.org/index.php ☟这里下载的是3.1.2版本 2 安装与配置 2.1 初步安装 默认就可以,点击红框内按钮依次进行安 ...

  8. json 格式化处理工具

    json 格式化处理工具 用于JSON的快速命令行处理工具,简单无依赖. 我这边列举一些最常用的: 调试 http 请求时打印格式化后的数据 格式化本地或或流中的数据 获取 json 的键值或进行执行 ...

  9. Cassandra开发入门文档第二部分(timeuuid类型、复合主键、静态字段详解)

    timeuuid类型 timeuuid具有唯一索引和日期时间的综合特性,可以与日期和时间函数联合使用,常用的关联函数: dateOf() now() minTimeuuid() and maxTime ...

  10. [LeetCode] 622.Design Circular Queue 设计环形队列

    Design your implementation of the circular queue. The circular queue is a linear data structure in w ...