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

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

封装,继承与多态

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

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


相关推荐

  • 【PotPlayer】敲好用的本地视频播放器

    【PotPlayer】敲好用的本地视频播放器软件简介PotPlayer是KMPlayer的原作者姜勇囍进入Daum公司后的新一代作品,目前仍有更新。由于采用Delphi编译程序的KMPlayer有一些弊端,姜勇囍为改进播放器本身的一些性能而重新用VC++进行构架。虽然PotPlayer与KMPlayer同属一个开发者的产品,但它与KMPlayer所注重的地方并不同,能够满足不同用户的使用需求。因该软件的官方网站托管于DAUM平台,中国大陆网络可能受防火长城(GFW)影响而无法正常访问。官方网站https://potplayer.daum.

    2022年7月14日
    40
  • SRT字幕格式_手机srt文件怎么加入视频

    SRT字幕格式_手机srt文件怎么加入视频srt字幕以其简单、体积小、易查看、易掌握等优点,深得人们的喜爱,但便利的代价就是样式少,无法实现复杂的特效。本文整理了srt字幕的基本格式以及支持的格式,同时介绍了ffmpeg中srt格式生成和

    2022年8月3日
    8
  • Linux安装tomcat,配置环境变量

    Linux安装tomcat,配置环境变量一、安装tomcat需要先配置jdk,所以没有配置jdk同学,先移步Linux安装JDK二、卸载tomcat检查linux是否安装tomcatrpm-qa|greptomcat查看下系统信息,确认是32位还是64位:uname-a输入rpm-qa|greptomcat如果有通过rpm-e`rpm-qa|greptomcat`(或rpm-e加上面rpm…

    2022年6月3日
    246
  • C++虚函数详解

    C++虚函数详解C++虚函数详解前言C++的特性使得我们可以使用函数继承的方法快速实现开发,而为了满足多态与泛型编程这一性质,C++允许用户使用虚函数**(virtualfunction)来完成运行时决议这一操作,这与一般的编译时决定**有着本质的区别。虚函数表实现原理虚函数的实现是由两个部分组成的,虚函数指针与虚函数表。虚函数指针虚函数指针**(virtualfunctionpointer)*…

    2022年7月26日
    7
  • 矩阵求秩[通俗易懂]

    矩阵求秩[通俗易懂]矩阵的秩怎么计算,这个问题一下子我居然不知道怎么下手。。虽然本科的时候学过线性代数,但是好久不用,很多东西都忘了。。今天略微梳理一下吧。最简单直观的方法:化成行最简形(或行阶梯形),然后数一下非零行数例如:将矩阵做初等行变换后,非零行的个数叫行秩将其进行初等列变换后,非零列的个数叫列秩矩阵的秩是方阵经过初等行变换或者列变换后的行秩或列秩矩阵的秩是线性代数中的一个概念。在线性代…

    2022年5月30日
    52
  • 紫光同创国产FPGA学习之Power Calculator

    紫光同创国产FPGA学习之Power Calculator紫光同创里面的,芯片功耗计算。没看过,没用过。有兴趣瞄一下。我又不用再电池行业,对电源没啥要求。没用经验之谈,拷贝参考书。一、总体介绍  (一)PangoPowerCalculator总体介绍PangoPowerCalculator是用来计算用户设计产生功耗的软件,简称PPC,是集成在PDS中的一个组件。用户在完成design设计,经过综合、map、布局布线后,可以使用P…

    2022年8月30日
    2

发表回复

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

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