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

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

封装,继承与多态

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

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


相关推荐

  • pta集合相似度_结构相似度

    pta集合相似度_结构相似度原题链接输入样例:33 99 87 1014 87 101 5 877 99 101 18 5 135 18 9921 21 3输出样例:50.00%33.33%#include<bits/stdc++.h>#define x first#define y second#define send string::nopsusing namespace std;typedef long long ll;const int N = 1e4 + 10;cons

    2022年8月8日
    2
  • idea最新永久激活码2022【中文破解版】2022.02.02

    (idea最新永久激活码2022)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月31日
    85
  • 大数据建模流程之数据处理[通俗易懂]

    大数据建模流程之数据处理[通俗易懂]原文链接数据是建模的基础,也是研究事物发展规律的材料。数据本身的可信度和处理的方式将直接决定模型的天花板在何处。一个太过杂乱的数据,无论用多么精炼的模型都无法解决数据的本质问题,也就造成了模型的效果不理想的效果。这也是我们目前所要攻克的壁垒。但是,目前我们市场对的数据或者科研的数据并不是完全杂乱无章的,基本都是有规律可循的,因此,用模型算法去进行科学的分析,可以主观情绪对决策的影响。所以数据是非常重要的一部分。那么,接下来我们就详细说一下数据的处理与分析。一.数据的基本特征当看到数据的时候,首要做的并

    2022年6月8日
    42
  • redis实现分布式锁的原理_Redis作为分布式锁原理

    redis实现分布式锁的原理_Redis作为分布式锁原理一、写在前面现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(SpringCloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是…

    2025年7月25日
    0
  • MySQL导入sql文件的三种方法

    MySQL导入sql文件的三种方法文章目录一、使用工具NavicatforMySQL导入1.打开localhost_3306,选中右击“新建数据库”3.指定数据库名和字符集(可根据sql文件的字符集类型自行选择)3.选中数据库下的表运行SQL文件4.选中路径导入二、使用MySQLWorkbench导入(MySQL的官方工具)1、第一种方法①.新建一个数据库demo(名字任取),点击指示图标(或者File栏里面的OpenSQLScript…)②.选中路径导入SQL文件③.添加指定库名的命令,并点击运行注意:大概在15、16行

    2022年10月2日
    1
  • php url安全性,allow_url_fopen潜在的安全性风险

    php url安全性,allow_url_fopen潜在的安全性风险PHP的动态功能同时也是潜在安全性风险的,它会从网路上的任何位置主动撷取、接收及处理资料。攻击者可能会试图传送恶意的资料和指令码,并欺骗您的服务器撷取恶意的指令码及执行它们。攻击者也可能会试图读取和写入您服务器上的档案,以控制网站并利用网站实现自己的目的。您可以设定PHP设定来加强PHP安装的安全性,并协助保护网站防止恶意攻击。Php.ini档案会指定PHP在您的网站上执行时所使用…

    2022年7月16日
    12

发表回复

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

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