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学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
随机推荐
- ZZZPHP1.61 代码审计-从SQL注入到Getshell
近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...
- Mybatis增删改查,Demo整合
第一步:MyBatis的Jar包引入mybatis-3.2.7.jarmysql-connector-java-5.1.8.jar MyBatis的pom.xml依赖 <dependencies ...
- 从零单排学Redis【铂金一】
前言 只有光头才能变强 好的,今天我们要上铂金段位了,如果还没经历过青铜和白银和黄金阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 从零单排学Redis[ ...
- Linux 初始环境配置 以及避坑 (详细)
没事儿喜欢自己装个虚拟机捣鼓捣鼓,经过几次装一些Linux 经验, 有时候 电脑了 .想重新系统了,又要重新去配置环境, 有时候又要去查很多很多命令 . 记录分享下Linux 下配置开发环境以及桌面 ...
- C语言实现循环队列
今日在处理数据存储的问题中,数据占用的空间较大,在询问之下,提及循环队列. 没有学习过的我,想想就是头大,只能慢慢从网上找资料,一个字母一个字母的敲,最后,还是慢慢的对队列有了一些理解 对于循环队列有 ...
- July 09th, 2018. Monday, Week 28th.
Happiness is an inside job. 自内寻找,才能找到幸福. From William Arthur Ward. Nobody wants to suffer, and we al ...
- Leetcode 136.只出现一次的数字 By Python
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
- Java中String做为synchronized同步锁使用详解
Java中使用String作同步锁 在Java中String是一种特殊的类型存在,在jdk中String在创建后是共享常量池的,即使在jdk1.8之后实现有所不同,但是功能还是差不多的. 借助这个特点 ...
- Android 开发者必知必会的权限管理知识
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/OQRHEufCUXBA3d3DMZXMKQ 导语 本 ...
- WaitGroup
WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行. 先说说Wait ...