Python面向对象封装

面向对象——封装


一、概述


Python面向对象的三大特性:封装、继承和多态。


封装:在类中对数据的赋值、内部调用对外部用户是透明的,类就像一个胶囊或容器,里面包含类的数据和方法。


二、封装


在类中我们封装什么?属性、方法和对象


封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。所以,在使用面向对象的封装特性时,需要:


·将内容封装到某处


·从某处调用被封装的内容


第一步:将内容封装到某处


self是一个形式参数,当执行obj1 = Foo('wupeiqi', 18 )时,self等于obj1当执行obj2 =Foo('alex', 78 )时,self等于obj2


所以,内容其实被封装到了对象obj1和obj2中,每个对象中都有name和age属性,在内存里类似于下图来保存。



第二步:从某处调用被封装的内容


调用被封装的内容时,有两种情况:


·通过对象直接调用


·通过self间接调用


1、通过对象直接调用被封装的内容


#将零散的数据,包含在一个类型中#定义一个商品类型,封装和商品有关系的数据



2、通过self间接调用被封装的内容


执行类中的方法时,需要通过self间接调用被封装的内容





将对象敏感的数据,封装在类的内部,不让外界直接访问;而是通过定义的set/get方法来间接访问内部的数据的过程,此时,就可以在set/get方法中,添加条件限制代码!


>属性私有化,才能让外界不能直接访问


>在p2和p3中,约定了以一个下划线开头的变量,是私有变量,外界不要直接使用


>p3中,要求两个下划线开头的属性,表示当前类的私有属性,外界不能访问


综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容。


三、 类型封装的步骤


1.抽象一个类型,完成类的定义


2.使用__slots__魔法属性,限制当前类的属性列表


3.所有属性私有化


4.给每个属性,提供set/get方法


备注:关于扩展属性(就是创建好对象之后增加的属性),主要是预留下来,给共享的数据使用的


如果对象中,有需要共享的数据,可以选择使用这样的属性。


#设置当前类创建的对象中,可能出现的属性列表,列表中没有出现的属性名称不允许使用



四、封装的几个阶段:


1.类型的定义:零散数据包含在一个类中,封装



2.属性私有化,提供set/get函数:封装进阶



3.添加@property和@method.setter,隐藏set/get函数:高级封装



4.扩展:同一个类中,出现了相同名称但是参数不同的函数:方法重载





五、总结


“封装”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类);封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。


简而言之:封装就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python面对对象封装 1.1 面向过程和面向对象 根据操作数据的函数或语句块来设计程序的过程,叫做面向过程编程...
    Newthan阅读 203评论 0 0
  • 所谓封装就是对外部世界隐藏对象的工作细节 今天老师讲了四个例子,由简入繁,由浅入深详细分析了封装的意义及用法 例1...
    恶人未满阅读 233评论 0 0
  • 封装:将一堆零碎的东西封箱装起来! 为什么需要封装?封装的作用和含义? 比如:①我要看电视,只需要按一下开关和换台...
    云Shen不知处阅读 312评论 3 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,184评论 6 13
  • 众所周知,焦虑可以使人处于不良的精神状态中,还会引发上火、失眠和胃口差等身体不适的情况,女性还可能因为焦虑导致生理...
    付鸽鸽鸽鸽阅读 789评论 0 5