课程首页 › 第8章 › 第48课

第48课 封装性

第8章 类与对象的奥秘· 知识点:类与对象 · 原书 8.6.1

类具有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。

我们试试给光头强涨工资。

插图