第48课 封装性
类具有3个特性,即封装性、继承性和多态性。利用这3个特性可以帮助我们更好地使用类。

我们家里都有电视机,可以用遥控器遥控电视机,进行开机、换台、关机等操作,但是我们并不知道电视机里面的具体细节。
在定义类的时候也是一样的。类可以将数据和逻辑封装起来,使用的人不用关心具体的逻辑,调用类提供的方法完成相应的操作就可以了。
我们进行一个游戏,来学习类的封装性。
李老板叫光头强砍树
李老板是光头强的老板,光头强是伐木工。李老板还有很多像光头强一样的伐木工。李老板需要砍伐树木的时候,就可以叫下面的员工去砍伐,具体员工怎么砍伐,是用锯子锯还是用斧头砍,李老板其实都不关心,他只关心树是否按时按量的送到了客户手中。我们通过Python来实现这个程序。

程序运行结果如下:
李老板说:光头强去砍棵树,并且送到建筑工地。
躲开熊大、熊二---
砍树---
装树---
送树---
光头强说:李老板,我完成了任务。
在程序中定义了Employee类,包括两个属性:name和iphone。
在Employee类中定义了5个方法,分别说明如下。
·work():李老板的员工工作的方法。
·__hide():躲避熊大、熊二的方法。
·__cutTrees():砍树的方法。
·__loadTrees():装树的方法。
·__deliveryTrees():送树的方法。

__表示这个是私有方法,只允许类的内部访问,在类外面无法访问。这些方法只能光头强使用,李老板是不能使用的。
在主程序中调用work()方法进行砍树和送树的操作,主程序作为使用方,就相当于李老板,他并不关心树是怎么砍的,也不关心是怎么送树的,李老板只是关心树是否送到了。

在主程序中访问私有方法__hide(),会发现访问失败。私有方法只能在类里面访问,不能在类外面访问。
在类里面不仅可以定义私有方法,还可以定义私有属性。我们给员工Employee类添加工资属性。工资可是需要保密的哟,设置成私有属性。

程序运行结果如下:
光头强
1897088****
AttributeError:'Employee'object has no attribute'__salary'
Employee类中增加了私有属性salary,通过__salary定义私有属性。私有属性只能在类中访问。
在主程序中查看打印属性name、iphone和__salary,通过运行程序发现__salary无法打印,程序报错:对象没有属性。
Employee __salary
因为__salary是私有属性,所以在类外是不能随意访问和修改的。但是我们可以在类中提供方法给外部调用来修改私有属性__salary。
我们试试给光头强涨工资。
