python封装方法有几种_Python中的封装是什么

我们都知道,面向对象的语言有四个特性,抽象、封装、继承和多态。在之前的文章中,给小伙伴们已经讲解了抽象和继承,今天,给小伙伴们讲一下什么叫封装。为什么要做封装呢?

小伙伴们试想一下,你今天发明了一个很厉害的东西,里面的设计很精妙,凝聚了你的灵感和汗水。你打算把它卖给别人。这时候你就担心了,首先,如果他把我的东西拿过去,自己拆开研究明白了,模仿我怎么办;其次,他随便修改我里面的设计,把整个东西给弄坏了怎么办;还有,别人看到我这里面这么复杂,可能会头大,怎么让它简单一点。这时候,你就得琢磨了,怎么把核心的部分给隐藏起来,让别人接触不到呢?这时候我们把里面的东西给封装好,告诉别人,你往里面输入特定的东西就行,里面的不用管,我给你要的输出就行了。这就是封装的基本思想。

Python中的封装

在Python中我们做封装也是一样的,对外界提供好访问内部隐藏内容的接口。接口呢可以理解为入口,有了这个入口,使用者无需且不能够直接访问到内部隐藏的细节,只能走接口,从而严格控制使用者的访问。

我们总结一下,封装的目的有三个:保护隐私、保证稳定性、降低使用复杂度

在Python中的封装可以分为两个层面,

封装的第一个层面

第一个层面的封装很好理解,我们在创建类和对类实例化生成对象后,我们只能用类名.或者对象名.的方式去访问里面的属性和方法,这本身就是一种封装。这一层面的封装(隐藏),类名.和实例名.就是访问隐藏属性的接口。这个我们在之前降了很多了。

封装的第二个层面

第二个层面的封装,是我们在类中把某些属性和方法隐藏起来,也可以说定义成私有属性,只能在类的内部使用,外部无法访问,或者留下少量的接口(函数)供外部访问。

为什么要这么做呢?当我们定义一个类的时候,如果不使用私有属性,所有的属性都暴露给外部,这时候,如果使用者不小心突然修改了某个属性,可能会影响整个类或者对象的正常执行,所以我们需要对类里面的一些属性或方法进行封装。

那么,怎么定义私有属性和方法呢?很简单,只需要在属性或者方法名称前面加上两个下划线就可以了,也就是__XX。

私有属性和私有方法的封装

私有属性

先以私有属性为例来看个例子df5f118a5ba1a0013006a885cd290eeb1827cd02.png

可以看到,我把类属性grade改为__grade,实例属性age变为__age,现在这两个都是私有属性了。那么,当我们实例化Student类生成一个对象stu1,使用stu1去调用这两个属性,都会报错,小伙伴们可以注意第10行和第14行,显示Student类没有这两个属性。这就是私有属性不能被外部访问了。

那么,如果有一些需求希望能获取到私有属性的值,或者说要重新设置私有属性的值,应该怎么办呢?

我们可以定义接口函数,通过接口函数,让外部访问或者修改属性。我们来看看怎么操作~e671c5d05c8f70f627633445dc0cef09ca89e34a.png

在这里,我们定义了两个接口函数,get_age和set_age。get_age返回的是我们定义的私有属性__age。set_age用于设定私有属性__age的值这样,用户只需要记住这两个接口函数,就可以对私有属性__age进行操作了。

这样封装有什么好处呢?

通过封装,我们可以明确的区分类的内部和外部,使得定义类的人在不改变接口函数的情况下,可以按照自己的需要修改封装内的东西,而不影响其他人去调用;而其他人只需要知道一个接口函数,只要接口函数名、参数不变,其他使用者的代码永远无需改变。

私有方法

对于私有方法来说,设置和调用私有方法的操作与私有属性是基本一致的。我们通过代码来简单看一看。f31a5e9eaae50e9f09d4d98f032b7e00d4882bac.png

其实还是通过一个接口函数test去调用私有方法__func1,小伙伴们也发现了,在接口函数里面我们还加了一段代码print('调用私有方法')。这也是接口函数的一个好处,我们可以在其他外部调用者调用接口函数的时候增加一些功能,从而更好地与外部交互。

彩蛋

刚才我们说,私有属性和私有方法外部是不能调用的,事实上真的如此吗?

其实Pythonshi1做了一个处理,假设类名是A,私有属性是__x,Python会自动把属性变形为_A__x,也就是私有属性前面加了一个下划线和类名。但是一般也不会刻意去这样调用。如果你“一意孤行”的话,把代码全拼出来就可以了,如下面的代码所示。但是轻易不要尝试哦。a82118b1eab776683416d6974a39ccb7c8e5e1d7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值