这期内容当中小编将会给大家带来有关什么是Python对象的封装,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
我们家里都有电视机,从开机,浏览节目,换台到关的机,我们不需要知道电视机里面的具体细节,只需要在用的时候按下遥控器就可以完成操作,这就是功能的封装。
在用支付宝进行付款的时候,只需要在用的时候把二唯码给收款方或是扫一下收款方提供的二唯码就可以完成支付,不需要知道支付宝的支付接口,以及后台的处理数据的能力,这就是方法的封装。
生活中处处都是封装的概念。封装不是单纯意义的隐藏;封装数据的主要原因是保护隐私;封装方法的主要原因是隔离复杂度。
在编程语言里,对外提供接口,表示这个接口的函数,通常称为接口函数。
<强>封装分为两个层面:强>
第一层面的封装:创建类和对象时,分别创建两者的名称空间。只能通过类名加“。”或者obj。的方式访问里面的名字。
第二层面的封装,类中把某些属性和方法隐藏起来,或者定义为私有,只在类的内部使用,在类的外部无法访问,或者留下少量的接口(函数)供外部访问。
但无论是哪种层面的封装,都要对外提供好访问内部隐藏内容的接口。在Python中,使用双下划线的方式实现隐藏属性(设置成私有属性),在Python中,隐藏类的属性用什么办法呢? ?
来看下面的例子:
class 老师: ,,,def __init__(自我,姓名、年龄、课程): ,,,,,,,self.name=名字 ,,,,,,,self.age=年龄 ,,,,,,,self.course=,,,def 教(自我): ,,,,,,,印刷(“% s  is teaching" % self.name) class 学生: ,,,def __init__(自我,姓名、年龄、组): ,,,,,,,self.name=名字 ,,,,,,,self.age=年龄 ,,,,,,,self.group=,,,def 研究(自我): ,,,,,,,印刷(“% s  is studying" % self.name)
用所定义的类创建一个老师s1和一个学生s1。
t1=老师(28岁的“alex"“python") s1=学生(“jack", 22岁,“group2")
分别调用老师和学生的姓名,年龄等特征:
打印(t1.name、t1.age t1.course) 打印(s1.name s1.age s1.group)
返回如下的信息:
alex 28, python jack 22, group2
调用老师的教书技能和学生的学习技能:
t1.teach () s1.study ()
返回信息如下:
alex is 教学 jack is 学习
把这两类中的一些属性隐藏起来后,代码如下:
class 老师: ,,,def __init__(自我,姓名、年龄、课程): ,,,,,,,self.__name=名字 ,,,,,,,self.__age=年龄 ,,,,,,,self.__course=,,,def 教(自我): ,,,,,,,印刷(“% s  is teaching" % self.__name) class 学生: ,,,def __init__(自我,姓名、年龄、组): ,,,,,,,self.__name=名字 ,,,,,,,self.__age=年龄 ,,,,,,,self.__group=,,,def 研究(自我): ,,,,,,,印刷(“% s  is studying" % self.__name)
创建老师和学生的实例:
t1=老师(28岁的“alex"“python") s1=学生(“jack", 22岁,“group2")
再用前面一样的方法调用老师和学生的特征:
打印(t1.name、t1.age t1.course) 打印(s1.name s1.age s1.group)
此时这样调用就会报错,输出信息如下所示:
Traceback (most recent call 最后): File 才能“E:/py_code/oob.py",, line 114年,拷贝& lt; module> ,,,print (t1.name、t1.age t1.course) AttributeError: & # 39;老师# 39;,object has no attribute & # 39;名称
再调用老师的教书技能和学生的学习技能:
t1.teach () s1.study ()
返回信息如下:
alex is 教学 jack is 学习
可以看到隐藏属性后,再像以前那样访问对象内部的属性,就会返回属性错误,那现在要怎么才能访问其内部属性呢?
现在来查看t1和s1的名称空间
打印(t1.__dict__) {& # 39;_Teacher__name& # 39;:, & # 39;亚历克斯# 39;,,& # 39;_Teacher__age& # 39;:, 28日,& # 39;_Teacher__course& # 39;:, & # 39; python # 39;} 打印(s1.__dict__) {& # 39;_Student__name& # 39;:, & # 39;杰克# 39;,,& # 39;_Student__age& # 39;:, 22日,& # 39;_Student__group& # 39;:, & # 39; group2 # 39;}什么是Python对象的封装