面向对象的程序设计中,某个类把所需要的数据(也可以说是类的属性)和对数据的操作(也可以说是类的行为)全部都封装在类中,分别称为类的成员变量和方法(或成员函数)。这种把成员变量和成员函数封装在一起的编程特性称为封装。
类的属性按使用范围分为共有属性和私有属性。具体地,在Python实现面向对象的编程思想的时候,封装在类中的属性可以分为两种:数据类的属性和数据对象的属性(也可以成为数据类的成员变量和属于对象的成员变量),其中,这两种成员变量又各自分为共有成员变量和私有成员变量。(晕晕乎乎)
在使用面向对象的封装特性时,需要:
将内容封装到某处
从某处调用被封装的内容
A.封装什么?(类的属性是对数据的封装,而类的方法是对类的行为的封装)
你钱包里有多少钱(数据的封装)
你的性取向(数据的封装)
你撒尿的具体功能是怎么实现的(方法的封装)
B.为什么要封装?
1.封装数据的主要原因:保护隐私(作为男人的你,脸上就写着:我喜欢男人,你害怕么?)
封装方法的主要原因:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你不必知道你自己的尿是怎么流出来的,你直接掏出自己的接口就能用尿这个功能)
2.不带下划线的封装:直接访问,推门而入
带一个下划线的封装:约定(项目规范)是私有属性,不让直接访问,约定:进门前先敲门。这种机制并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了
带两个下划线的封装:私有属性,反锁,进门前必须敲门
C.什么时候应该封装类
当项目中出现一些零散的、有关系的基本类型数据时,考虑通过类型将这些数据统一组织起来管理。定义一个自定义类,将这些数据作为自己的属性。
当封装继续,操作进阶,添加@property和@method.setter,此时set/get函数被隐藏,同一个类中,出现了相同名称但是参数不同的函数,这个地方还好,毕竟内容是自己写的,而且也是在一起的,关键是一旦开始编程,再拿面向过程单纯的写函数时那种眼光去看待编程中的内容,会感觉难以理解,一会跳到这里,一会蹦到那边(晕晕乎乎的感觉消失了,变成了晕倒)。
你面对的是全局,是自定义类,心理上没有了那种整齐感、顺序感,反而不容易上手,此时,函数的功能要单一这一理念得到了初步体现,函数进行的功能越单一,重复利用性越高,比如浏览网页时,或者直接登陆,或者在浏览某一子页面想要发表评论、回复信息时,需要登陆,那么这里登陆这一方法跳转的界面就不同了。
作为智慧生物的我们,在没有对某一对象的思想之前,所有的理解感觉就像咫尺天涯,内容近在眼前,上手却又远在天边,而思想一旦开始转变拥有,方法仅仅是熟悉度上的时间与练习