Python

状课网-少儿编程网课专业平台

Python python青少年编程—面向对象编程之封装

发布时间:2021-11-23 17:09:23 浏览 0

各位小伙伴大家好:

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

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

什么意思呢?来看段代码:

python青少年编程—面向对象编程之封装

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

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

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

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

python青少年编程—面向对象编程之封装

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

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

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

python青少年编程—面向对象编程之封装

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

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

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

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

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

 

文章来源:创客编程小屋

本文链接:https://www.ascratch.com/news/17527.html

上一篇:python青少年编程—面向对象编程之多重继承 下一篇:返回列表
相关推荐 更多