python 封装调用_零基础学习 Python 之封装

写在之前

大家好,这是首发在我公众号「Python空间」的第 50 篇文章,欢迎关注,期待和你的交流。

今天来讲 OOP 的最后一个特性:「封装」。封装是对具体对象的一种抽象,简单来说就是将某些部分隐藏起来,在程序外部看不到,这个看不到不是说人用眼睛看不到那个代码,其含义是其它的程序无法调用。

封装

想要了解封装,就免不了要提到「私有化」。私有化就是将类或者函数中的某些属性限制在某个区域内,从而让外部无法调用。

Python 中私有化的方法相对来说也比较简单,就是在准备私有化的属性或方法名字前面加上双下滑线。我们来看下面的例子:

class Sample:

def __init__(self):

self.my_name = 'rocky'

self.__name = 'snow'

def __python(self):

print('i love python')

def use_code(self):

print('which is your love?')

self.__python()

if __name__ == "__main__":

s = Sample()

print(s.my_name)

print(s.__name)

然后我们来运行一下,看一下结果:

rocky

Traceback (most recent call last):

File "test.py", line 16, in 

print(s.__name)

AttributeError: Sample instance has no attribute '__name'

竟然报错了,我们查看一下报错的信息,显示的是我们没有 __name 属性。果然前面加上双下划线以后就被隐藏了,在类的外面无法被调用,我们再来试试那个函数是否可以使用,修改一下:

class Sample:

def __init__(self):

self.my_name = 'rocky'

self.__name = 'snow'

def __python(self):

print('i love python')

def use_code(self):

print('which is your love?')

self.__python()

if __name__ == "__main__":

s = Sample()

s.use_code()

s.__python()

s.use_code() 的结果是要打印两句话: “which is your love?” 和 “i love python”,use_code() 方法和 __python() 方法是在同一个类中,可以调用。后面的 s.__python() 试图调用被私有化的方法,我们运行一下来看结果:

which is your love?

i love python

Traceback (most recent call last):

File "test2.py", line 16, in 

s.__python()

AttributeError: Sample instance has no attribute '__python'

还是报错,告诉我们没有找到 __python 方法。你看,我们是如愿以偿,该调用的调用,该隐藏的隐藏了。虽然用上面的方法确实的做到了「封装」,但是如果我们想要调用那些私有属性的时候该怎么办?Python 当然给我们想了办法,使用 property 装饰器。我们来看下面的例子:

class Sample:

def __init__(self):

self.my_name = 'rocky'

self.__name = 'snow'

@property

def name(self):

return self.__name

if __name__ == "__main__":

s = Sample()

print(s.name)

运行的结果如下:

snow

从上面的结果可以看出,用了 @property 这个装饰器以后,在调用那个方法的时候,用的是 s.name 的形式,这就好像是在调用一个属性一样,跟前面例子中的 s.my_name 的格式一样。

看来,封装的确不是让人 “看不见” 啊。

写在之后

到这,OOP 的三大特性就全部说完了,不知道前面的两个「继承」 和 「多态」你还记得么?不记得的回头再去看看前面两天的文章。

我还是那句话,公众号是一个适合你在闲暇的时候用来碎片化学习的地方,我写的可能也会有一些遗漏的地方,想学习好一门编程语言,还是要多看书,多思考,重要的是多敲代码多实现,有时候看起来简单,真的到了需要实现的时候其实各种错误层出不穷。

如果你觉得本篇文章对你有所帮助的话,欢迎点赞转发,同时有什么问题欢迎和我交流。

The end。

b5ce94f73b617783938af0c75c1e12aad7332749.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值