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学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
随机推荐
- RazorPage 小测试,作下记录
@page@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf@{}@functions{ public AppInfo item { ...
- java监听器简述
监听器的概念 所谓监听器就是对内置对象的状态或者属性变化进行监听并且做出反应的特殊servlet,并且也需要在web.xml文件中进行相关配置. 内置对象的状态变化:初始化和销毁,也就是说当内置对象初 ...
- 立即执行函数 IIFE
立即执行函数表达式IIFE(Immediately-invoked function expression)我们知道,在javascript(ES5)中,是没有块级作用域的概念的.看一个例子 for ...
- 使用CSS3的clip-path(裁剪路径)实现剪贴区域的显示以及实例实现图片渐变
clip-path介绍 clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法.想象一下你在Photoshop中勾勒路径的场景.MDN上是这样介绍 clip-p ...
- 一、Activity的生命周期和启动模式
1.Activity的生命周期 1.1.典型情况下的生命周期 在有用户参与的情况下,Activity所经过的生命周期的改变. Activity会经历如下生命周期: onCreate-onRestart ...
- CenOS_用户级别
1.运行级别 共有7个运行级别: 0:关机 1:单用户(不用密码也能登陆) 2:多用户无网络 3:多用户有网络 4:保留 5:图形化界面 6:重启 1.1设置运行级别语法: init <级别数字 ...
- python3 装饰器初识 NLP第三条
还是先抄一条NLP假设... 三,有效果比有道理更重要 光说做法有道理或者正确而不顾是否有效果,是在自欺欺人. 在三赢(我好,人好,世界好)的原则基础上追求效果,比坚持什么是对的更有意义. 说道理 ...
- July 03rd. 2018, Week 27th. Tuesday
I don't know anything with certainty, but seeing the stars makes me dream. 我不知道世间有什么事是确定不变的,但只要一看到星空 ...
- 【Teradata】TD Unicode编码格式下varchar定义测试
如下测试表,每个字段字符编码格式均为Unicode. 1.varchar(1)可以存储1个汉字,也只能存储1个ASCII字符. --创建表nc_test,每个字段编码格式均设定为Unicode[使用S ...
- Linux集群时间同步方法
方法1.ntp 平滑同步时间 (一)确认ntp的安装 1)确认是否已安装ntp [命令] rpm –qa | grep ntp 若只有ntpdate而未见ntp,则需删除原有ntpdate.如: n ...