OPP的三大特征之封装总结
'''
封装:
1.什么是封装?
封装是把什么东西装到容器中,再封闭起来
与隐藏有相似之处,但不是单纯的隐藏
官方解释:封装是指对外部隐藏实现细节,并提供简单的使用接口 封装的好处:
1.提高安全性
2.隔离复杂性 python中的属性访问权限
1.公开的(默认)在任何地方都能访问到
2.私有的,仅在内部可以使用 如何封装
使用特殊语法:要给因隐藏的变量名称前面加上两个下划线__ 使其变成私有的
如下例'''
'''
class Person:
def __init__(self,name,sex,age,id_card):
self.name = name
self.sex = sex
self.age = age
self.__id_card = id_card def say_hi(self):
print('hello girl,my name is %s ,sex:%s age:%s id_card:%s '
% (self.name,self.sex,self.age,self.__id_card )) p1 = Person('Egon','man',18,1232323124214)
p1.say_hi()
# print(p1.__id_card) #外部无法访问私有的内容 ''' # 封装方法
# 使用场景:一些方法存在是为了完成其他的功能,这些方法不应该提供给外界使用,例如汽车发动机中的点火功能
# 同样,当一个功能(函数)中的代码太多时,我们需要将其拆封成若干不同的小函数,这些小函数就不应该提供给外界使用
# 因此也需要对函数进行封装,如下例
# class PC:
# def boot(self):
# self.__read_rom()
# self.__boot_bios()
# self.__read_opt()
# self.__boot_gui()
# print('亲,早上好,电脑启动成功啦,美好的一天从清晨开始')
#
# def __read_rom(self):
# print('正在读取rom数据')
# def __boot_bios(self):
# print('正在启动bios系统')
# def __read_opt(self):
# print('正在读取并执行操作系统指令')
# def __boot_gui(self):
# print('正在启动用户界面')
# comp1 = PC() # 对电脑的启动顺利做了封装,否者就会出现问题
# comp1.boot() # 正常启动电脑 # comp1.__read_opt() #此时,再执行就会出现问题,对这些功能都进行了封装, '''
# 访问器和设置器
# 私有属性,外界完全无法访问,就会变得毫无意义
# 因此我们可以定义访问方法和设置方法,也称之为访问器 和 设置器
# 1.提供私有属性的访问权限
# 2.增加额外的逻辑判断
# 如下例
'''
# class Person:
# def __init__(self,name,age,id_card):
# self.name = name
# self.age = age
# self.__id_card = id_card
#
# def say_hi(self):
# print('你好,我叫%s,今年%s岁,我的身份证号是%s,我是一个逗比' % (self.name,self.age,self.__id_card))
#
# # 访问器
# def get_id_card(self,pwd):
# if pwd == '123':
# return self.__id_card
# else:
# print('密码错误或您没有访问权限')
#
# # 设置器
# def set_id_card(self,new_id):
# if len(new_id) == 3 or len(new_id) == 5:
# self.__id_card = new_id
# else:
# print("身份证格式错误!")
#
# p1 = Person('林海峰',89,123)
# print(p1.get_id_card('123')) 获取id_card # p1.set_id_card('12345') # 修改id_card的原来属性
# print(p1.get_id_card('123'))
# print(p1.name) '''
property 装饰器
# 以上就是访问器和修改器,但是也存在问题?
# 访问和修改私有属性的写法与普通属性的写法不一致,这样对于使用者而言就变得复杂了
'''
# class Person:
# def __init__(self,name,id_card):
# self.name = name
# self.__id_card = id_card
#
# # 获取私有属性
# @property
# def id_card(self):
# return self.__id_card
#
# # 修改私有属性
# @id_card.setter
# def id_card(self,new_id):
# self.__id_card = new_id
#
# # 删除私有属性
# @id_card.deleter
# def id_card(self):
# print("不好了 你要删除身份证了")
# self.__dict__.pop("_Person__id_card")
#
#
# p1 = Person('deng',12345)
# print(p1.name) # name 是普通属性
# print(p1.id_card) # id_card 是私有属性,但是访问方式都是一致的 # p1.id_card = "12345" #设置私有属性
# print(p1.id_card) # del p1.id_card # 删除私有属性
# print(p1.__dict__)
# print(p1.id_card)
# print(p1._Person__id_card) """
实现封装的远原理
python是通过变形的方式 来完成私有化操作
具体:把双下划线开头的名字 在名字前添加_类名 发生变形操作是在定义阶段就发生了并且只发生一次 默认情况下 子类是无论是类内部还是外部都不能访问父类的私有属性的 当然你可以强行访问 """
# class Person:
# def __init__(self,id):
# self.__id = id
# self.name = "bgon"
#
# def __test(self):
# pass
#
# # p1 = Person("123")
# # print(p1.__dict__)
# # print(p1.__id)
# # print(Person.__dict__)
# Person.__a = 1
# print(Person.__dict__)
#
# class A:
# __age = 20
#
# class B(A):
# def func(self):
# # print(self.__age)
# print(super().__age)
# pass
#
# # print(A.__age)
# # print(B._A__age) # b = B()
# b.func()
OPP的三大特征之封装总结的更多相关文章
- C#学习笔记7:多态是面向对象的三大特征(封装、继承、多态)之一
多态: 多态是面向对象的三大特征(封装.继承.多态)之一. 什么是多态? 一个对象表现出多种状态. 多态的实现方法: 1.虚方法: 2.抽象方法: 3.接口. PS:New 关键词可以隐藏父类的方法. ...
- 面向对象三大特征之封装与static——(Java学习笔记四)
面向对象 编程本质:以类的方式组织代码,以对象的方式组织(封装)数据 对象:具体的事物,某个类的对象(实例) 类:是对对象的抽象,用于描述同一类型的对象的一个抽象概念 对象和类的关系:特殊到一 ...
- JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)
面向对象编程具有三大特征: 封装 继承 多态 一.封装 1.好处 狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性! ①隐藏一个类中不需要对外提供的实现细节 ②使用者只能通过实现 ...
- Java的OOP三大特征之一——封装
面向对象三大特征之一 封装 继承 多态 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系. ...
- Java面向对象设计主要有三大特征:封装性、继承性和多态性
Java面向对象设计主要有三大特征:封装性.继承性和多态性 一 封装性 1.1 概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访 ...
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- Java学习:面向对象三大特征:封装、继承、多态之封装性
面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...
- Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。
面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
随机推荐
- 从壹开始 [ Id4 ] 之二║ 基础知识集合 & 项目搭建一
前言 哈喽大家又见面啦,感觉好久没更新了,这几天看了一本书<解忧杂货铺>,嗯挺好的,推荐一下
- Bagging之随机森林
随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Ba ...
- java提高(15)---java深浅拷贝
#java深浅拷贝 一.前言 为什么会有深浅拷贝这个概念? 我觉得主要跟JVM内存分配有关,对于基本数据类型,只存在栈内存,所以它的拷贝不存在深浅拷贝这个概念.而对于对象而言,一个对象的创建会在内存中 ...
- 一个Java程序猿眼中的前后端分离以及Vue.js入门
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...
- Unity C#笔记 委托&事件
C#的委托与事件搭配,即是观察者模式的一种实现. 因为观察者模式的原理很易懂,不作多讲,本文纯粹用于记录语法. delegate(委托) //声明没有参数,没有返回值的委托类型XXXX public ...
- c# 多种方法调整屏幕亮度
Github: https://github.com/CHNMaxGor/AjustScreenBrightness 方法一: 使用网上常说的 Gdi32.dll 下的 SetDeviceGammaR ...
- ArcGIS API for JavaScript 入门教程[6] 再讲数据——Map类之可操作图层
[回顾]上篇交代了Map是各种图层(不管是实际上的图层还是由图层构成的对象)的容器,是数据的容器,并不作显示(由视图类绘制).并重点讲解了由图层构成的复杂图层——高程属性ground和底图属性base ...
- Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{...
转载请标明出处:https://www.cnblogs.com/tangZH/p/10764568.html 在做多渠道打包的时候出现了这个错误,在高版本的gradle出现. 具体错误为:Cannot ...
- Altium Designer快速调整丝印
Altium Designer快速调整丝印 今天我为大家讲的内容是altium designer快速调整丝印,这是我们做完PCB设计布线完成后的下一个步,很多朋友都是非常熟悉的.但是我们很多人只会用a ...
- Markdown工具Atom及基本语法
下载使用 访问atom.io下载Atom 这里下载的是1.33.1版本 好用的插件包 点击File->Settings->Packages,可以安装指定的插件包. markdown-img ...