<strong><span>第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空间,我们只能用类名.或者obj.的方式去访问里面的名字,这本身就是一种封装</span></strong>
<strong>第二个层面的封装:类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问,或者留下少量接口(函数)供外部访问。</strong>
<em><span><strong>在python中用双下划线的方式实现隐藏属性(设置成私有的)</strong></span></em>
<strong>1.类中定义的</strong><strong>__x只能在内部使用,如self.__x,<strong><strong>引用的就是变形的结果</strong></strong>。</strong>
<strong><strong>2.这种变形其实正是针对外部的变形</strong><strong>,在外部是无法通过__x这个名字访问到的。</strong></strong>
<strong>3.在子类定义的__x不会覆盖在<strong>父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆盖的。</strong></strong>
<strong>4.这种机制也并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如a._A__N</strong>
<strong>5.变形的过程只在类的定义是发生一次,在定义后的赋值操作,不会变形</strong>
<strong>6.在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的</strong>