封装
时间:2019-10-28
本文章向大家介绍封装,主要包括封装使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#在python中用双下划线开头的方式将属性隐藏起来(设置成私有的 ''' 类中私有的,只有类内部使用,外部无法访问 封装的真谛在于明确地区分内外,封装的属性可以直接在内部使用, 而不能被外部直接使用,然而定义属性的目的终归是要用, 外部要想用类隐藏的属性,需要我们为其开辟接口, 让外部能够间接地用到我们隐藏起来的属性 ''' # class A: # def fa(self): # print('from A') # def test(self): # self.fa() # class B(A): # def fa(self): # print('from B') # b=B() # b.test() #在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的 # class A: # __x =10 #以单划线开头的就是被隐藏起来,如果以双划线开头则外部调用不可调用 # def __fa(self):#在定义时就变形为_A__fa # print('from A') # def test(self): # self.__fa()#只会与自己所在的类为准,即调用_A__fa # class B(A): # def __fa(self): # print('from B') # # b=B() # # print(A.__dict__)# '_A__x': 10, 所有要想访问到 __x 需要输入的是print(_A__x) # print(b._A__x) #10 # b.test() ''' 1:封装数据:将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制。 ''' # class Teacher: # def __init__(self,name,age): # # self.__name=name # # self.__age=age # self.set_info(name,age) # # def tell_info(self): # print('姓名:%s,年龄:%s' %(self.__name,self.__age)) # def set_info(self,name,age): # 既然外部不可以使用,但是内部可以调用,所以写这个函数就是对外开放个接口,让外部去访问 # if not isinstance(name,str): # raise TypeError('姓名必须是字符串类型') # if not isinstance(age,int): # raise TypeError('年龄必须是整型') # self.__name=name # self.__age=age # # # t=Teacher('egon',18) # t.tell_info() # # t.set_info('egon',19) # t.tell_info() ''' 2:封装方法:目的是隔离复杂度 #取款是功能,而这个功能有很多功能组成:插卡、密码认证、输入金额、打印账单、取钱 #对使用者来说,只需要知道取款这个功能即可,其余功能我们都可以隐藏起来,很明显这么做 #隔离了复杂度,同时也提升了安全性 ''' class ATM: def __card(self): print('插卡') def __auth(self): print('用户认证') def __input(self): print('输入取款金额') def __print_bill(self): print('打印账单') def __take_money(self): print('取款') def withdraw(self): self.__card() self.__auth() self.__input() self.__print_bill() self.__take_money() a=ATM() a.withdraw()
原文地址:https://www.cnblogs.com/luncky/p/11752101.html
- spring mvc4:异常处理
- TCP/IP, WebSocket 和 MQTT
- struts2: 玩转 rest-plugin
- 设置系统环境变量立即生效的VBS脚本
- velocity模板引擎学习(1)
- mybatis 3.x 缓存Cache的使用
- XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
- mac: vmware fusion中cent os启动假死的解决办法
- java:hibernate + oracle之坑爹的clob
- 启用WCF NetTcpBinding的共享端口
- asp中的md5/sha1/sha256算法收集
- UE4从零搭建CF游戏关卡(蓝图篇)
- 通用的序列号生成器库
- 利用Geneva开发SOA的安全模型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 爬取数据缺失的补坑,Python数据爬取的坑坑洼洼如何铲平
- 如何开发跨框架的组件
- SpringBoot系列之异步任务@Async使用教程
- 深入k8s:k8s部署&在k8s中运行第一个程序
- Java是如何实现Future模式的?万字详解!
- Tensorflow基础入门十大操作总结
- Django个人博客,三小时带你入门Django框架
- 微信公众号文章采集工具,可采集文章文字内容信息及图片
- Python打包GUI界面组件汇总,Tkinter(TK)实例代码
- 知了超细讲解Django打造大型企业官网学习记录,02diango url 笔记
- 直播卖货小程序源码中,商品分类页面是如何实现的
- python requests.session验证码登录应用实战,爱站关键词挖掘采集
- 【淘宝】python的淘宝秒杀抢购下单源码参考
- Python素材下载爬虫,ui素材下载爬取采集源码
- Python与seo的应用,sitemap.xml文件制作工具源码