封装的意义
1.封装意味着什么?
用囊状物包围、包装或者保护
2.一个良好的类接口能够隐藏其所性类的内部实现,并向外界提供一个与类的内部实现分离和区别开来的
细菌细胞膜外表面的意义在于与外界进行感知、接触以及发生交互作用
3.一个良好的类接口设计必须是完整的,同时又不能暴露类的任何内部实现
如果一个细菌的细胞膜不是封闭的,那么这种细菌肯定活不长;其内部的有机组织会迅速溢出,它也肯定会死亡
4.一个良好的类接口会保护类的内部实现,以免它们遭受未经授权的访问和操作
杀灭细菌(和人类)的主要手段是制造能够破坏细胞膜的东西.从微观层面来说,这包括化学制品、酶或者能够适当制造破孔的有机生物体(或许最终是纳米机器人).而从宏观层面来说,刀和枪都是人类长久以来热衷的武器
5.封装是面向对象编程的核心概念
6.所谓面向对象,通常定义为:数据以及操作这些数据的函数的组合,补充-通过由一组函数构成的接口将调用代码与内部数据隔离开来(由接口来负责操纵内部数据).此观念强调了两点,一点是低耦合度,另一点是被组合起来的函数构成了一个起保护作用的接口
7.面向对象就是关于将接口和实现分享的方法学,只不过这种分离必须能够改善高内聚性和低耦合度
8.数据成员大多永远都应当为私有的
9.公用数据违反了封装原则,因为它允许调用代码直接操纵对象的内部信息,这意味着对调用代码的高度信任
10.在现实当中,很少人需要直接去操纵对象的内部实现。举个例子,很少有人需要直接操纵我的胃,因为那样他们可能很容易一不小心就干错事,至多他们只会通过我的公用接口去间接地操纵我的内部,做法的好处是他们在进行操作之前必须首先让我知道并得到我的认可才行,例如递给我一瓶标有"喝掉我"字样的液体,那么我可以决定是喝了它,还是用它来洗头或洗车,根据自己的感觉和判断.当然,有些人的确有资格直接操作我的"内部",例如外科医生,只不过即使如此:这种情况也很少见我至少能够选择是否愿意接受手术我至少能够选择我高度信任的医生.
Python封装实现的步骤:
定义类型,封装零散数据【抽象的属性】
[使用__slots__属性,限制当前类的属性列表à为了代码的统一性]
所有属性私有化【属性使用双下划綫开头,外界就不能直接访问这样的属性了】
给每个属性提供set/get方法,在方法中添加限制条件
高级封装
使用@property和@get_method.setter注解,来注释set/get方法,隐藏set/get方法的实现,让方法的使用方式和属性一致
伪方法重载:python中,默认不提供方法重载,但是在高级封装的过程中,又出现了类似方法重载的代码语法,所以~称之为伪方法重载。
对方法的封装
在封装的过程中,除了封装私有属性,还可以针对一些底层的操作方法进行私有化,将方法封装在类的内部,通过提供的一个公共方法来控制该方法的访问权限