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学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
随机推荐
- 学习CSS3之实心圆
CSS3是最新版本的CSS,学习后可以更好的用于工作及自己修改自己代码的各种样式. border-radius圆角方法画实心圆.相当于在长方形(正方形)上画半径为边长一半的圆弧. 效果如上图,代码如下 ...
- 工厂模式讲解, 引入Spring IOC
目录 引入 简单工厂 抽象工厂 Spring的bean工厂 模拟Spring工厂实现 模拟IOC 引入 假设有一个司机, 需要到某个城市, 于是我们给他一辆汽车 public class Demo { ...
- 简单Java类 全网最详细讲解 !!!
最近学习java非常吃力,学习的进度很快,由于基础没打牢固,整体上项目理解很吃力,偶尔会遇到一些基本的概念,都会阻碍整体的理解.最近也看了不少的视频讲解,听得很迷,最后搞得很乱,没有明确的学习目标,今 ...
- MySQL · 引擎特性 · InnoDB崩溃恢复
前言 数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证.本 ...
- JAVA设计模式之简单粗暴学建造者模式
文章由浅入深,先用简单例子说明建造者,然后分析模式的优缺点,最后结合优秀开源框架Mybatis,说明该模式的用处. 1.先定义一个机器人模型 package com.jstao.model; publ ...
- (三)图数据库neo4j的安装配置
(一)neo4j安装 neo4j有社区版本和企业版,社区版本是免费的,企业版本是收费的.在linux上安装如下步骤: 1.将下载的neo4j-enterprise-3.4.0-unix.tar.gz包 ...
- pytest框架之命令行参数2
前言 上篇博客说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则! pytest执行用例命令行参数 --collect-only:罗列出所 ...
- c# word文档的操作
参考https://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
- JNA 备注
最近写JNA调用DLL的代码比较多.应该这样说,C的精华在于对指针的灵活运用,而用JNA调用C/C++最痛苦的也在于此.你不知道该用什么样的方式去对应C/C++的方法,特别是遇到指针.结构体指针.指针 ...
- perlin噪声
手贱去点了图形学里面的噪声课程,然后一个周末就交代在这上面了,还是有些云里雾里. 噪声就是给定一个输入变量,生成一个值在0~1范围内的伪随机变量的函数.在图形学中一般是输入一个坐标得到一个范围在0~1 ...