包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工)

实现方法被egon分成了两种:

1."基于继承"实现的包装

需求:定义一个只能包含数字的列表

代码示例:

 # 编辑者:闫龙
class Egon(list):
def append(self, obj):#重写append方法
if(type(obj) == int):#判断obj是否为一个int型
super().append(obj)#调用父类的append方法将obj存放在列表中
else:
raise TypeError("Egon 只会数数")#主动抛出类型错误异常
def insert(self, index:int,object:int):#重写insert方法
if(isinstance(object,int)):#判断object是否为一个int型
super().insert(index,object)#调用父类的insert方法将object存放在列表的index位置
else:
raise TypeError("都跟你说了,Egon只会数数")#主动抛出类型错误异常
e=Egon([1,2,3])#实例化一个列表
e.append(1)
#e.append("1") 会抛出异常
e.insert(0,1)
#e.insert(0,"1") 会抛出异常
print(e)

实现全数字列表类型

2."基于授权"实现的包装

需求:不使用继承的方式,完成一个自己包装的文件操作

代码示例:

 # 编辑者:闫龙
class Open:
def __init__(self,filename,mode,encoding): #在实例化Open的时候传入文件名称,打开方式,编码格式
self.filename = filename
self.mode = mode
self.encoding = encoding
#使用系统函数open()传入相应打开文件所需的参数,将文件句柄传递给self.file
self.file = open(filename,mode=mode,encoding=encoding)#这里我总感觉是在作弊
def read(self):#自己定义read方法
return self.file.read()#返回self.file文件句柄read()的值
def write(self,Context):#自己定义write方法
self.file.write(Context+"\n")#使用self.file文件句柄write方法将内容写入文件
print(Context,"已写入文件",self.filename)
# 利用__getattr__(),Attr系列中的getattr,当对象没有找到Open中传递过来的名字时,调用此方法
def __getattr__(self, item):
return getattr(self.file,item)#返回self.file文件句柄中,被对象调用,切在Open类中没有的名字 MyFile = Open("a.txt","w+","utf8")
MyFile.write("Egon is SomeBody")
MyFile.close()
MyFile = Open("a.txt","r+","utf8")
print(MyFile.read())
MyFile.seek(0)
print(MyFile.readline())

写了一个假Open!

说实话,Egon,你后来讲的又特么快了!

下次课的时候,你一定要把这个假Open讲一讲!

最新文章

  1. JAVA的POI操作Excel
  2. jq菜单折叠效果
  3. ionic hybrid备忘
  4. Ubuntu/linux 安装 kernel-devel
  5. flume服务的搭建
  6. spring mvc DispatcherServlet详解之一---处理请求深入解析
  7. Proguard中optimize设置不当引发SimException
  8. Strurts(四)——从Struts原型模拟看大道至简(含实例下载)
  9. java核心技术学习笔记之一程序设计概述
  10. Core Animation简介
  11. HTML5 Canvas绚丽的小球详解
  12. 使用PHP进行SOCKET编程
  13. Kaldi的delta特征
  14. Javascript高级编程学习笔记(2)—— Script标签
  15. MySQL 逻辑物理备份测试
  16. 如何最大限度提高.NET的性能
  17. 给访问私有变量添加access method
  18. 《TCP/IP 详解 卷1:协议》第 5 章:Internet 协议
  19. Hadoop单机Hadoop测试环境搭建
  20. LocalStorage存储JSON对象的问题

热门文章

  1. uva 11525(线段树)
  2. js全端
  3. Java并发编程之线程创建和启动(Thread、Runnable、Callable和Future)
  4. hihocoder1711 评论框排版[并查集+set]
  5. 【IOI 2018】Doll 机械娃娃
  6. BGP的那些安全痛点(转)
  7. python之旅:函数对象、函数嵌套、名称空间与作用域、装饰器
  8. Python 爬虫入门(二)—— IP代理使用
  9. ROI align解释
  10. spring cloud 配置中心