1.包装
一切皆对象,所熟知的 list,等方法也是通过类来完成的,可以通过继承的方式来对系统方法进行定制
需求:对list方法进行判断,只能输入字符串,如果输入其他类型则返回值
#对原有系统方法进行定制,改变原有append方法,并且添加额外方法:显示输入类的中间字符 class List(list): def append(self,str_obj): if type(str_obj) is str: super().append(str_obj)#对原有list进行定制,只能输入字符串,super是继承自原list的方法 else: print('please input a str') def show_middle_str(self): mid=int(len(self)) return self.index(mid) p1=List('hello')#继承自list,可以自动实例化 print(p1) p1.append(5222) p1.append('djfsh') print(p1)
2.使用组合的方式进行授权
授权:对已有的功能进行更新
import time class Real_Open: def __init__(self,filename,mode='r',encode='utf8'): self.open=open(filename,mode,encoding=encode)#这里是最关键的,将self.open直接获得了一个句柄,然后得到了open的所有方法 self.filename=filename#上面其中有一点,要注意本身open格式,文件名,读写方式,encoding等 self.mode=mode self.encode=encode def write(self,write_thing): t=time.strftime('%Y-%m-%d %X')#这里格式要设置好 res=self.open.write('%s %s'%(t,write_thing))#对写u进行改写,输入时间 return res p1=Real_Open('aaa.txt','w',encode='utf-8') p1.write('to be a better man')
2.1 更新,使本方法可以使用open的所有方法
import time class Real_Open: def __init__(self,filename,mode='r',encode='utf8'): self.open=open(filename,mode,encoding=encode)#这里是最关键的,将self.open直接获得了一个句柄,然后得到了open的所有方法 self.filename=filename#上面其中有一点,要注意本身open格式,文件名,读写方式,encoding等 self.mode=mode self.encode=encode def write(self,write_thing): t=time.strftime('%Y-%m-%d %X')#这里格式要设置好 res=self.open.write('%s %s'%(t,write_thing))#对写u进行改写,输入时间 # return res # 但是想调用opne的其他方法就没有办法了??? def __getattr__(self, item): return (getattr(self.open,item))#如果没有read方法,则在open的方法里找并且返回 p1=Real_Open('aaa.txt','w+',encode='utf-8') p1.write('to be a better man') p2=Real_Open('a.txt','r',encode='utf-8') print(p2.readline())