封装就指的是把属性装进一个容器中,有隐藏的意思,但这种隐藏对外不对内。
封装数据属性的目的是为了将数据属性封装起来,类外部的使用就无法直接操作该数据属性了,需要类内部开一个接口给使用者 而且类的设计者乐园在接口上附加任意的逻辑
来严格控制使用者对数据的操作
而封装函数属性的目的是隔离复杂度
如何封装呢?
只要在属性前加上__开头 ,该属性就会被隐藏
隐藏具备的特点:
1.只是一种语法意义上的变形,即__开头的属性会在检测语法时发生变形成_类名__属性名
2.这种隐藏是对外不对内的,因为类内部检测语法时所用的代码都会统一发生变形
3.这种变形只会在检测语法时发生一次 在类定义之后新增的__开头的属性不会发生变形
4.如果父类不想让子类覆盖自己的属性 可以在自己的属性前加上__开头
class A: def __f1(self): print('A.f1') def test(self): self.__f1() class B(A):#子类 def__f1(self): print('B.f1') obj=B() obj.test()
#验证父类属性前加上__不会被子类覆盖
class Foo: __x=111 def __init__(self,m): self.__m=m def f1(self): print(self.__m) print(self.__x)#内部接口 #obj = Foo(12) ==>print(obj.f1())