面向对象的三大特征–封装

面向对象的三大特征–封装

封装,继承与多态

封装特征:
实际工作中很多的成员不方便为对象之外的访问或者操作的,所以需要限定以下是否可以操作成员。
封装特性就是对于成员操作进行限制的保护性措施!

面向对象的封装分为三个级别:
私有化封装 OK
受保护的封装(暂时不讲,在继承章节讲解)
公共的封装 OK

对象/类成员的访问:
1.当前类/对象内部访问 (在类的结构内部)
2.类和对象的外部访问 (在类的结构外部)
3.类和对象的子类/子对象的访问(在类的结构外部,在子类/对象的内部)

私有化封装:
方法:在成员属性或者方法名称之前,添加双下划线,就可以私有化成员。
特征:私有化的成员属性和方法,无法在类/对象的外部访问;私有化成员仅允许在类/对象的内部访问

公共的封装:
方法: 任何成员在没有进行私有化操作的时候默认都是公共的封装。
特征: 公共的封装成员属性和方法,在任何位置都可以被访问。

python封装的迷幻~:(了解,但是不允许使用)
其实python没由实现和其他语言一样的面向对象封装策略(还不是很完备)

私有化封装采用了name mangling(改名) 的策略实现的私有化操作。并不是真正的私有优化!
改名策略:将原有成员属性或者方法名 修改为 _类名__成员名

 

1.封装的特性实例1

 1 #封装的特性实例1
 2 #声明一个人类
 3 class Human:
 4     #成员属性
 5     name = '张三'#允许别人使用
 6     __sex  = '男' #不允许别人访问
 7     age = 18
 8     heart = '健康心脏'#不允许别人访问
 9     __kidney  = '强大的肾脏'#不允许别人访问
10 
11     #成员方法
12     #唱歌
13     def sing(self):
14         print('都如艾米发馊拉稀都')
15 
16     #吃饭 #允许别人访问
17     def eat(self):
18         print('我最喜欢吃西红柿炒番茄了!')
19 
20     #跑步 #不允许别人访问
21     def __run(self):#私有化
22         print('121,121,锻炼身体')
23 
24     #聊天(用于测试类.对象的内部访问私有成员)
25     def talk(self):
26         print('我的名字是',self.name)
27         #在类/对象的内部访问私有成员属性
28         print('我的肾脏是非常好的',self.__kidney)
29         #在类/对象的内部访问私有成员方法
30         self.__run()
31 
32 
33 #实例化对象
34 zs = Human()
35 #print(zs)
36 #输出结果:<__main__.Human object at 0x000001BDBD370F98>
37 
38 #访问对象的成员属性和方法--------------------------------------
39 
40 #访问性别
41 #print(zs.sex)
42 #print(zs.__sex) #私有化封装之后,类/对象的外部无法访问!
43 #输出结果:AttributeError: 'Human' object has no attribute 'sex'
44 
45 #访问肾脏
46 #print(zs.kidney)
47 #print(zs.__kidney)#私有化封装之后,类/对象的外部无法访问!
48 #输出结果:AttributeError: 'Human' object has no attribute 'kidney'
49 
50 #调用唱歌方法
51 #zs.sing()
52 #输出结果:都如艾米发馊拉稀都
53 
54 #调用跑步方法
55 #zs.run()
56 #zs.__run()#私有化封装之后,类/对象的外部无法访问!
57 #输出结果:AttributeError: 'Human' object has no attribute 'run'
58 
59 #测试类./对象内部访问私有成员
60 zs.talk()
61 '''
62 输出结果:
63 我的名字是 张三
64 我的肾脏是非常好的 强大的肾脏
65 121,121,锻炼身体
66 '''

 

2.封装的特性实例2

 1 #封装的特性实例2
 2 #声明一个人类
 3 class Human:
 4     #成员属性
 5     name = '张三'#允许别人使用
 6     __sex  = '男' #不允许别人访问
 7     age = 18
 8     heart = '健康心脏'#不允许别人访问
 9     __kidney  = '强大的肾脏'#不允许别人访问 #根据改名策略 将属性修改为 _类名__属性名 ->_Human__kidney
10 
11     #成员方法
12     #唱歌
13     def sing(self):
14         print('都如艾米发馊拉稀都')
15 
16     #吃饭 #允许别人访问
17     def eat(self):
18         print('我最喜欢吃西红柿炒番茄了!')
19 
20     #跑步 #不允许别人访问
21     def __run(self):#私有化
22         print('121,121,锻炼身体')
23 
24     #聊天(用于测试类.对象的内部访问私有成员)
25     def talk(self):
26         print('我的名字是',self.name)
27         #在类/对象的内部访问私有成员属性
28         print('我的肾脏是非常好的',self.__kidney)
29         #在类/对象的内部访问私有成员方法
30         self.__run()
31 
32 
33 #实例化对象
34 zs = Human()
35 
36 #访问私有化属性--肾脏
37 #print(zs.kidney)
38 #输出结果:AttributeError: 'Human' object has no attribute 'kidney'
39 #print(zs.__kidney)
40 #输出结果:AttributeError: 'Human' object has no attribute '__kidney'
41 
42 #知晓改名策略之后,可以访问私有成员(严禁任何人使用该方法访问私有成员)
43 print(zs._Human__kidney)
44 #输出结果:强大的肾脏
45 zs._Human__run()
46 #输出结果:121,121,锻炼身体

 

转载于:https://www.cnblogs.com/lws865/p/10851459.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100929.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm安装第三方库_下载pycharm

    pycharm安装第三方库_下载pycharm1、安装支持python的IDEPycharm专业版;2、利用edu邮箱,免费注册获取license免费使用专业版。

    2022年8月28日
  • Windows平台下Makefile学习笔记(一)

    Windows平台下Makefile学习笔记(一)作者:朱金灿来源:http://blog.csdn.net/clever101决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码);另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便。本文主要分为三部分:第一部分讲述nam

    2022年5月7日
  • 查看80端口:_如何查看自己80端口开放

    查看80端口:_如何查看自己80端口开放查看80端口:netstat-ano|findstr80添加端口:netshhttpaddiplistenipaddress=xxx.xxx.xxx.xxx删除端口:netshhtt

    2022年8月3日
  • mysql timestamp[通俗易懂]

    mysql timestamp[通俗易懂]一般建表时候,创建时间用datetime,更新时间用timestamp。这是非常重要的。【1】timestamp字段所在行更新时,timestamp字段会被更新成当前时间(1.1)一个表中出现了两

    2022年7月2日
  • python字符串替换replace函数

    python字符串替换replace函数python字符串替换replace函数replace(old,new,count)old,旧字符或字符串new,新字符或字符串count,最大替换数量,从起始位置开始计数,默认替换所有注意:replace函数替换字符串,不影响原字符串示例1:默认替换所有s1=’2019.10.30’s2=s1.replace(‘.’,’-‘)s2’2019-10-30’…

    2022年6月7日
  • Activexobject_javascript打开新窗口

    Activexobject_javascript打开新窗口一、功能实现核心:FileSystemObject对象    要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象。二、FileSystemObject编程 使用FileSystemObject对象进行编程很简单,一般要经过如下的步骤:创建FileSystemObject对象、应用相关方法、访问对象相关属性。 (一)创建Fi

    2022年10月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号