python笔记10-面向对象

三种编程方法论

  • 面向过程:把复杂的任务一步一步分解成简单的任务。
  • 函数式编程:思想上接近于数学运算,根据某种方式,根据方式得出的结果。
  • 面向对象编程:一种编程方式,需要使用“类”和“对象”来实现,其实就是对“类”和“对象的”使用

软件质量属性

软件质量属性包含:成本,性能,可靠性,安全性,可维护性,可移植性,可伸缩性,可扩展性等

面向过程

  • 概念:核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,把这个大的问题分解成很多个小问题或子过程,这些子过程在执行的过程中继续分解,直到小问题足够简单到可以在一个小步骤范围内解决。
  • 优点:复杂的问题流程化,进而简单化
  • 缺点:扩展性极差
  • 应用场景:一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,著名的例子有Linux內核,git,以及Apache HTTP Server等。但如果你要处理的任务是复杂的,且需要不断迭代和维护 的, 那还是用面向对象最方便了。

面向对象编程

  • 概念:核心是“对象”二字,对象就是特征与技能的结合体。
  • 优点:可扩展性高
  • 缺点:编程的复杂度高,易出现过度设计的问题
  • 应用场景:应用于需求经常变化的软件中,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

一、名词解释

  • :一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型、模板。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法
  • 属性:人类包含很多特征,把这些特征用程序来描述的话,叫做属性,比如年龄、身高、性别、姓名等都叫做属性,一个类中,可以有多个属性
  • 方法:人类不止有身高、年龄、性别这些属性,还能做好多事情,比如说话、走路、吃饭等,相比较于属性是名词,说话、走路是动词,这些动词用程序来描述就叫做方法。
  • 实例(对象):一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同
  • 实例化:把一个类转变为一个对象的过程就叫实例化 就是类名+括号,就是在执行类的__init__()方法
  • 构造方法:__init__(...)被称为 构造方法或初始化方法,在例实例化过程中自动执行,目的是初始化实例的一些属性。每个实例通过__init__初始化的属性都是独有的
  • 析构方法(解构方法):__del__(self)被称为 析构方法或解构方法,实例在内存中被删除时,会自动执行这个方法。

二、类和对象

  • 类中可以有任意python代码,这些代码在类定义阶段便会执行
  • 因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过 类名.__dict__查看
  • 对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的.语法
  • 点是访问属性的语法,类中定义的名字,都是类的属性
  • isinstance(obj,cls)检查obj是否是类 cls 的对象
  • 类的两种用法:实例化和属性引用(类的属性就两种:变量和函数)
  • 对象也叫实例只有一种用法:属性引用,就对象本身而言它只有数据属性
  • 构造函数中的self表示创建的当前对象。方法中的self表示谁调用的方法,self就是谁。
  • 示例对象访问属性或调用方法时,永远都是先找自己的,找不到就往父类找。

 类中调用属性

三、__init__方法

  • 为对象初始化自己独有的特征
  • 该方法内可以有任意的python代码
  • 一定不能有返回值*****

四、属性查找

在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

  • 类有两种属性:数据属性和函数属性
  • 类的数据属性是所有对象共享的
  • 类的函数属性是绑定给对象用的

 

五、特性1:封装

封装在于明确区分内外, 类的实现者不需要让类的调用者知道具体的实现过程,隔离了复杂度,同时也提升了安全性,类的实现者可以修改封装内的东西而不影响外部调用者的代码。

在面向对象思想中是把一些看似无关紧要的内容组合到一起,统一进行存储和使用,这就是封装。

1、构造方法和类本身的包裹

使用构造方法将属性封装到某个具体对象中,然后通过对象直接或者self间接获取被封装的属性,类本身就是一种封装的体现,它将数据与专门操作该数据的功能整合到一起。

2、__双下划线属性隐藏

  • 在python中用双下划线开头的方式将属性隐藏起来,设置成私有的
  • 类中所有双下划线开头的名称如__x都会在类定义时自动变形成:_类名__x的形式
  • 变形的过程只在类的定义时发生一次,在定义后的赋值操作,不会变形
  • 在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的

3、装饰器@property也有封装的思想

  • @property 类的静态属性:
    1. 将一个类的函数定义成特性以后,对象再去使用的时候obj.mbi,根本无法察觉自己的mbi是执行了一个函数然后计算出来的,
    2. @property这种特性的使用方式遵循了统一访问的原则
  • @classmethod
    1. 把一个方法绑定给类,会把类本身当做第一个参数自动传给绑定到类的方法
    2. 类的绑定方法
  • @staticmethod
    1. 被staticmethod装饰器修饰过的方法,都是解除绑定的方法,实际上就函数:就没有自动传值功能了
    2. 解除绑定的方法
  • 凡是定义在类的内部,并且没有被任何装饰器修饰过的方法,都是绑定方法:有自动传值功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值