面向过程 VS 面向对象

面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。面向对象的程序设计好比如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来想了想解决这个问题需要四个人:唐僧,沙和尚,猪八戒,孙悟空,每个人都有各自的特征和技能(这就是对象的概念,特征和技能分别对应对象的属性和方法),然而这并不好玩,于是如来又安排了一群妖魔鬼怪,为了防止师徒四人在取经路上被搞死,又安排了一群神仙保驾护航,这些都是对象。然后取经开始,师徒四人与妖魔鬼怪神仙互相缠斗着直到最后取得真经。如来根本不会管师徒四人按照什么流程去取。

面向对象的程序设计的

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

在python 中面向对象的程序设计并不是全部。

面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

了解一些名词:类、对象、实例、实例化

类:具有相同特征的一类事物(人、狗、老虎)

对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

实例化:类——>对象的过程(这在生活中表现的不明显,我们在后面再慢慢解释)

在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法
class 类名:def __init__(self,参数1,参数2):self.对象的属性1 = 参数1self.对象的属性2 = 参数2def 方法名(self):passdef 方法名2(self):pass对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法#括号里传参数,参数不需要传self,其他与init中的形参一一对应#结果返回一个对象
对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

面向对象命名空间类有自己的命名空间,对象也有自己的命名空间。对象可以访问类的命名空间,类不能方位对象的命名空间当一个类在创建的时候,就产生了一个这个实例和对象之间的关系,可以通过实例(也可以说对象)找到实例化它的类但是类不能找他的实例化例如:
class Person:    def __init__(self,name):        self.name = name    def eat(self):        return self.name,"吃饭"alex = Person('alex')alex.eat() #可以访问类的命名空间Peason.name #类不可以方位对象的命名空间在访问变量的时候,都优先使用自己命名空间中的变量,自己命名空间中没有,在到类的命名空间去找在使用对象修改类的静态属性的时候,相当于在自己的命名空间中创建了一个新的变量。在类的静态变量的操作中,应该使用类名来直接进行操作,就不会出现乌龙问题

面向对象的组合一个类的对象,作为另外一个类的属性,就叫做组合,组合是什么有什么的问题,集成是什么是什么的问题
class Person:    def __init__(self,name,sex,hp,dps):        self.name = name        self.sex = sex        self.hp = hp        self.dps = dps        self.bag = []    def attack(self,dog):        return "%s攻击了%s,%s掉了%s点血"%(self.name,dog.name,dog.name,self.dps)

class Weapon:    def __init__(self,price,dps):        self.price = price        self.dps = dps
alex = Person('alex','男',1000,10)roubaozi = Weapon(2000,20)alex.weapon = roubaozi #roubaozi是Weapon的对象,weapon是alex的属性

练习:用组合的知识点,计算圆环的面积(公式,用大圆的面积减去小圆的面积)
class Circle:    def __init__(self,r,pi = 3.14):        self.r = r        self.pi = pi    def yuan_area(self):        ret = self.r**2*self.pi        return retclass yuanhuan:    def __init__(self,outside_r,insider_r):        self.outside_r = Circle(outside_r)        self.inside_area = Circle(insider_r)    def huan_mianji(self):        ret = self.outside_r.yuan_area() - self.inside_area.yuan_area()        return rethuan = yuanhuan(6,3)print(huan.huan_mianji())

 

转载于:https://www.cnblogs.com/xiaoAzaina/p/9038828.html

python--面向对象相关推荐

  1. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  2. 这可能是Python面向对象编程的最佳实践

    作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...

  3. 第八课.Python面向对象(二)

    类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...

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

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

  5. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. Python 面向对象 基础

    编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...

  7. python面向对象类属性_python面向对象之类属性和类方法案例分析

    本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...

  8. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  9. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  10. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

最新文章

  1. golang if 条件判断语句 简介
  2. VMware vSphere@cloudstack基本功能测试报告
  3. 表达式_ya是不合法的c语言标识符,高级语言程序设计复习题.doc
  4. 用数学模型向你解释离婚
  5. Spring的核心模块解析
  6. Html_Img元素 设置图片与其他元素横排高度一致
  7. php查询表导出excel文件路径,Thinkphp5如何将导出的excel表格存储到服务器中项目目录的指定目录中?...
  8. 7.边缘检测:2D运算——Canny的不同结果、单个2D边缘检测滤波器、实现边缘3种方法Matlab实战_3
  9. VS2013 生成sqlite3动态连接库
  10. HDU2022 海选女主角【最值】
  11. ibatis java 项目_iBatis搭建JAVA项目
  12. 量化指标公式源码_五行量化副图指标公式源码
  13. IM即时通讯实现原理
  14. 出新书了!| 赠书啦,免费包邮
  15. 可控硅失效现象_晶闸管常见损坏原因分析(全)
  16. js原型链,继承和promis的基本理解
  17. 十种进程注入技术介绍:常见注入技术及趋势调查
  18. 微信小程序开发(九)之开发版和测试版小程序打不开的问题
  19. C++11 bind函数
  20. Mac终端添加快捷命令

热门文章

  1. nginx ngx_http_index_module(默认初始页)
  2. TensorFlow tf.squeeze
  3. tensorflow GPU环境配置 Nvidia+cuda+cudnn
  4. Docker学习总结(54)——save,load,import 命令有何区别
  5. 对领域驱动设计的理解与实践
  6. Redis学习总结(13)——分布式之数据库和缓存双写一致性方案解析!
  7. Vue.js学习总结(1)——Windows下Vue.js开发环境搭建
  8. group() 数组java_java 根据每个分组个数,分解数组. | 学步园
  9. springboot使用netty容器_Spring Boot 2 实战:使用 Undertow 来替代Tomcat
  10. win7注册表无法修改计算机名称,Win7旗舰版