2018-07-12-Python全栈开发day26-part3-包装、组合

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())

猜你喜欢

转载自www.cnblogs.com/hai125698/p/9302247.html
今日推荐