'''
封装:
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的三大特征之封装总结的更多相关文章

  1. C#学习笔记7:多态是面向对象的三大特征(封装、继承、多态)之一

    多态: 多态是面向对象的三大特征(封装.继承.多态)之一. 什么是多态? 一个对象表现出多种状态. 多态的实现方法: 1.虚方法: 2.抽象方法: 3.接口. PS:New 关键词可以隐藏父类的方法. ...

  2. 面向对象三大特征之封装与static——(Java学习笔记四)

    面向对象     编程本质:以类的方式组织代码,以对象的方式组织(封装)数据 对象:具体的事物,某个类的对象(实例) 类:是对对象的抽象,用于描述同一类型的对象的一个抽象概念 对象和类的关系:特殊到一 ...

  3. JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)

    面向对象编程具有三大特征: 封装 继承 多态 一.封装 1.好处 狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性! ①隐藏一个类中不需要对外提供的实现细节 ②使用者只能通过实现 ...

  4. Java的OOP三大特征之一——封装

    面向对象三大特征之一 封装  继承  多态   封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系. ...

  5. Java面向对象设计主要有三大特征:封装性、继承性和多态性

    Java面向对象设计主要有三大特征:封装性.继承性和多态性 一  封装性   1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访 ...

  6. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  7. Java学习:面向对象三大特征:封装、继承、多态之封装性

    面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...

  8. Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。

    面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...

  9. Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性

    面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...

随机推荐

  1. sun.misc.Unsafe 详解

    原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsa ...

  2. 游戏服务器h2engine架构优化和跨平台设计

    H2engine的GitHub星星不知不觉已经破百了,也没有特意推广过,但是慢慢的关注的人越来越多.因为事情多,好久没有写东西了,前一段时间有了一些想法,把h2engine又更新了一下,感觉h2eng ...

  3. 浅谈CSS浮动属性

    要介绍css的float浮动属性,就必须先了解一下标准文档流 标准文档流:   在没有css的干预下,块级元素独占一行,可以设置宽高,行内元素并排显示,宽高自动填充.   HTML页面的标准文档流(默 ...

  4. Nodejs实现用户注册

    1创建连接池对象 2导出连接池对象 /** * 1.引入mysql模块 * 2.创建连接池对象 * 3.导出连接池对象 */ const mysql = require('mysql'); var p ...

  5. java:比赛中常用方法整理——字符串(基础)

    一.将字符串转化为字符数组: toCharArray返回一个字符数组. char[] a=J.toCharArray(); 二.字符串的长度 字符串的长度和字符数组的长度是不一'样'的. 字符串长度( ...

  6. 1、Linux命令随笔

    1 Linux命令总结 2 3 man ==命令帮助; 4 help ==命令的帮助(bash的内置命令); 5 ls ==list,查看目录列表; 6 -ld:查看目录权限; 7 -l:(long) ...

  7. 模型转换[yolov3模型在keras与darknet之间转换]

    首先借助qqwweee/keras-yolo3中的convert.py和tensorrt例子yolov3_onnx,并重新编写了代码,实现将darknet格式的yolov3的yolov3.cfg和yo ...

  8. 微信小程序 写一个获取验证码 及setInterval 使用基本方法

    <!--index.wxml--> <view class="container"> <view class="container_cont ...

  9. mongo connections url string 的问题

    摘要 driver 连接Mongo DB的url其实很简单,就是几个变量拼接成一个url,和关系型数据库没什么不同.但是因为mongo有单个instance和replicaSet不同的部署策略,还有m ...

  10. 【Linux篇】--awk的使用

    一.前述 awk是一个强大的文本分析工具.相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片 ...