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

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

封装,继承与多态

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

面向对象的封装分为三个级别:
私有化封装 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ipconfig 和ip addr的区别「建议收藏」

    ipconfig 和ip addr的区别「建议收藏」今天在玩DNS解析记录的追踪。nslookup查了一下我们业务域名对应的ip。得到一个完全不知道的ip。此时我登录到应用服务器上,使用ipa查看了该服务器的网络配置。并没有这个ip。百思不得其解。搞了一天终于明白了,一共两个问题:1、ipaddr和ifconfig显示的不一样?使用ifconfig发现了使用nslookup查到的ip,而ipaddr竟然不显示那个ip地址。原因如下:net-tools起源于BSD,自2001年起,Linux社区已经对其停止维护..

    2022年7月27日
    17
  • 关于W25Q128地址的定义

    1.W25Q128将16M的内存分为256个块,每个块是64K;又将一个块分为16个扇区,一个扇区是4K;又将一个扇区分为16个页,一个页是256字节地址。话不多说,上图:2.在图上右边的红框中可以看到Block0(块0)的地址是000000-00FFFF,再看到左边红框中Block0的16个扇区,地址范围对应的就是Block0的地址范围了,第一个扇区的起始地址就是0000,终止地址是0F…

    2022年4月6日
    142
  • pycharm django环境搭建_django创建项目和应用的命令

    pycharm django环境搭建_django创建项目和应用的命令一、配置并准备你的环境1、首先,在设置里面选择好环境,这里我们使用python3.7(Ps:打开pycharm后—>File—>settings—>键入ProjectInterpreter),点击如下图所示的齿轮后出现Add。2、添加设置你自己安装的python后点击OK3、我们会看到现在都有什么东西,然后点击加号,下载django包。…

    2022年10月28日
    0
  • 说说你对servlet 的理解或者 servlet 是什么?「建议收藏」

    说说你对servlet 的理解或者 servlet 是什么?「建议收藏」说说你对servlet的理解或者servlet是什么?Servlet(ServletApplet),全称JavaServlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。其主要功能在于交互式的浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。 HttpServlet重写doGet和doPost

    2022年6月16日
    24
  • Burp_suite安装及使用教程(专业版)

    Burp_suite安装及使用教程(专业版)1、工具下载地址:https://down.52pojie.cn/Tools/Network_Analyzer/Burp_Suite_Pro_v1.7.37_Loader_Keygen.zip工具运

    2022年6月30日
    25
  • 最短路Dijkstra算法讲解

    最短路Dijkstra算法讲解

    2021年9月28日
    38

发表回复

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

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