最新消息:

python青少年编程第三季——11、面向对象编程之封装

Python 少儿编程 1585浏览 0评论
Python青少年编程第三季

各位小伙伴大家好:

上期我们了解了有关类的多重继承,本期我们继续来聊聊面向对象编程另外一个特性——封装

 

首先来看一下封装的定义:隐藏类的一些具体实现,通过提供一些接口来实现一些功能,将类的状态信息隐藏在类的外部,不允许在类的外部直接访问,而是通过这个类提供的一些方法来对属性进行操作以及访问。

什么意思呢?来看段代码

python青少年编程第三季——11、面向对象编程之封装

这里我们定义了一个Dog类,但是没写属性。而是写了两个方法:一个SetName方法,用来根据调用时传入的参数来修改属性的值(如果没有属性则创建)。

另一个是GetName方法,前面我们获取属性是直接用类.属性名的方式来获取。但是这里我们是通过GetName方法的返回值来获取。这就起到一定的隐藏属性的作用,实现一定的封装。

为什么说是“一定的”呢?

因为这只是形式上的隐藏,并没有实现真正的封装。来验证一下

python青少年编程第三季——11、面向对象编程之封装

在上面的程序中,倒数第三行,我们使用类名修改了属性的值后,成功返回了。也就是说我们还是可以在类外直接进行属性的修改,这与我们上面封装定义相矛盾。

怎么样才能实现真正的封装呢?

只需要对程序做一丁点的修改:

python青少年编程第三季——11、面向对象编程之封装

如图,和前面程序的区别仅仅是在属性名name的前面加了两个下划线_ _,这有什么特别的作用吗?

因为在Python中以两个下划线开头并且不以两个下划线结尾的属性和方法,被定义为私有方法,不予许在类外直接调用。

从结果也可以看出,这次我们使用wangcai.__name来修改属性的值没有成功,输出的结果还是“旺财”,起到了封装的作用。

但让我感到意外的是Python并没有报错,也就是说虽然你修改属性的值失败了(或者说这行代码没有起作用),但是python却没有告诉你。

 

到目前为止,有关python的基础知识就大致上为大家过了一遍,接下来预计会通过几个小项目来巩固我们所学的知识。

欢迎扫描下方二维码入群和我交流

python青少年编程第三季——11、面向对象编程之封装

 

转自公众号:
高维数学

您必须 登录 才能发表评论!