【Question】

比如,有100个学生的信息,包括学生的姓名,年龄,语文分数,数学分数,你怎么用模块把这些数据组织起来呢?

数据多了,函数也多了,该怎么组织呢?你觉得还是用模块吧,用模块不是不可以,但是不方便。

【封装】

隐藏对象的属性和实现细节,仅对外提供公共访问方式。

【好处】

1. 将变化隔离,便于使用;

2. 提高复用性,安全性;

【封装原则】

1. 将不需要对外提供的内容都隐藏起来;

2. 把属性都隐藏,提供公共方法对其访问。

注:在编程语言里,对外提供的接口(接口可理解为了一个入口),就是函数,称为接口函数,这与接口的概念还不一样,接口代表一组接口函数的集合体。

封装2个层面

封装其实分为两个层面,但无论哪种层面的封装,都要对外界提供好访问你内部隐藏内容的接口(接口可以理解为入口,有了这个入口,使用者无需且不能够直接访问到内部隐藏的细节,只能走接口,并且我们可以在接口的实现上附加更多的处理逻辑,从而严格控制使用者的访问)

第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空间,我们只能用类名.或者obj.的方式去访问里面的名字,这本身就是一种封装。      注意:对于这一层面的封装(隐藏),类名.和实例名.就是访问隐藏属性的接口

第二个层面的封装:类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问,或者留下少量接口(函数)供外部访问。             注意:对于这一层面的封装(隐藏),我们需要在类中定义一个函数(接口函数)在它内部访问被隐藏的属性,然后外部就可以使用了

类的封装

python通过变量名命名来区分属性和方法的访问权限,默认权限相当于c++和java中的public

类的私有属性: __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs。

类的私有方法:__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods

虽然python不允许实例化的类访问私有数据,但可以使用 object._className__attrName 访问属性。其实python内部私有化的实现只是将attrName属性变为了_className__attrName而已

class Demo:__id = 123456def getId(self):return self.__idtemp = Demo()
# print(temp.__id) # 这种写法会报错 AttributeError: 'Demo' object has no attribute '__id'
print(temp.getId()) # 123456
print(temp._Demo__id) # 123456

Python三:面向对象 之 类的封装相关推荐

  1. python编程语言继承_Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...

  2. java封装例题_java面向对象编程类的封装接口和基本类库练习题

    面向对象编程基本知识练习 一.判断题 1.不需要定义类,就能创建对象.() 2.构造方法用于给类的 private 实例变量赋值.() 3.对象一经声明就可以立即使用.() 4.在定义变量和方法时,必 ...

  3. C++ 深度解析教程(五)进阶面向对象、类与封装的概念、类的真正形态

    十三.进阶面向对象(上) 1.你考虑过吗 日常生活中,我们都习惯于对事物进行分类.那么,这种分类的思想是否可以引入程序设计中呢? 2.面向对象基本概念 面向对象的意义在于 将日常生活中习惯的思维方式引 ...

  4. python【面向对象(类和对象)】

    1.面向对象(类和对象) 1.编程思维 根据面对问题不同人呈现出来的思维模式不同,可以将编程思维分为三种: 1.面向过程编程(穷人思想)-- 会基本的逻辑和语法(遇到问题马上想到的是解决问题的具体逻辑 ...

  5. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  6. Python入门--面向对象的特征-->封装

    #面向对象的三大特征 #1.封装: 提高数据安全性 #将数据(属性)和行为(方法)包装到类对象中.在方法内部对属性进行操作,在类对象的外部调用方法. #这样,无需关心方法内部的具体实现细节,从而隔离了 ...

  7. Python学习-面向对象(类)

    1 了解面向对象 Python 就是一个面向对象的编程语言 对象就是内存中用来存储指定数据的一块区间 对象的结构:每个对象当中都保存了3种数据: 1.id(标识):id是由我们的解析器生成的,在Cyt ...

  8. [转载] python的面向对象和类与对象

    参考链接: Python对象和类 # 面向过程编程 #     核心是过程二字,过程指的是解决问题的步骤,即先干什么在干什么然后干什么 #     基于该思想编写程序好比在设计一条流水线,是一种机械式 ...

  9. 学学python(4):面向对象及类,模块

    1.       关于类的一些说明 1.1.__init__是类的构造函数,和其他语言中的构造函数功能是一样的,python类中还有其他的特殊方法,比如析构函数为__del__,在方法名的前后都有双下 ...

最新文章

  1. Linux中ifreq 结构体分析和使用
  2. Map获取键值,Map的几种遍历方法
  3. 自编码AutoEncoder 及PyTorch 实现
  4. 轩辕剑之天之痕1-5java_轩辕剑游戏 轩辕剑1到5全系列下载
  5. 利用计算机可以对物体的运动情况,2018-2019学年高中物理第05章曲线运动专题5.3实验:研究平抛运动情景分组训练新人教版必修2.docx...
  6. ecshop 收货人信息电话必填改为手机必填
  7. Bootstrap栅格系统(布局)
  8. mysql oracle对空值_Oracle空值处理函数
  9. 设计模式(一)----简单工厂、工厂方法和抽象工厂区别
  10. redis安装及使用
  11. 深入理解Nginx模块开发与架构解析第2版(书签导航正确)
  12. 软考计算机评职称,软考通过后如何评职称?
  13. PID控制器开发笔记之十二:模糊PID控制器的实现
  14. 企业搭建网站主要流程以及六个基本步骤
  15. 卖“生活方式”,还会是新式茶饮们的破局点吗?
  16. 椭圆曲线密码体制算法C语言,椭圆曲线密码的C语言设计与实现
  17. Windows编程简介
  18. 苹果系统虚拟机无usb服务器,win10系统苹果电脑运行虚拟机后无法识别显示U盘的详细方案...
  19. Counter()函数进行排序后如何得到有序的键
  20. VSE++: Improving Visual-Semantic Embeddings with Hard Negatives

热门文章

  1. 玩转“网上邻居”之网络配置(一)
  2. ArcGIS AddIN异常:无法注册程序集 未能加载文件或程序集ESRI.ArcGIS.Desktop.Addins
  3. 第二次冲刺-站立会议06
  4. Cocos2d-x.3.0开发环境搭建
  5. 理解javascript
  6. inner join 与 left join 之间的区别
  7. python介绍环境搭建、变量输入输出
  8. 01-04 Linux常用命令-网络相关
  9. 01-03 Linux常用命令-文本处理
  10. java fields是_一个快速生成R2.java中fields的插件