码迷,mamicode.com
首页 > 其他好文 > 详细

继承的方式完成包装

时间:2019-03-27 15:39:36      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:color   one   ini   一个   opened   open   append   cpu   __init__   

定制自己的数据类型:

技术图片
class List(list):
    def append(self, p_object):
        if type(p_object) is str:
            # self.append(p_object)             #会无限循环
            super().append(p_object)            #调用父类的append方法,不用传self   == list.append(self,p_object)
        else:
            print(只能添加字符串类型)

    def show_midlle(self):
        mid_index=int(len(self)/2)
        return self[mid_index]


# l2=list(‘hell oworld‘)
# print(l2,type(l2))

l1=List(helloworld)
# print(l1,type(l1))
# print(l1.show_midlle())
l1.append(1111111111111111111111)           #只能添加字符串类型
l1.append(SB)
print(l1)               #[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘, ‘SB‘]
View Code


包装一个类型通常是对已存在类型的一些定制,这种做法可以新建、修改或删除原有产品的功能。其他的则保持原样。

授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就授权给对象的默认属性

技术图片
import time
class FileHandle:
    def __init__(self,filename,mode=r,encoding=utf-8):
        # self.filename=filename
        self.file=open(filename,mode,encoding=encoding)
        self.mode=mode
        self.encoding=encoding
    def write(self,line):
        print(------------>,line)
        t=time.strftime(%Y-%m-%d %X)
        self.file.write(%s %s %(t,line))

    def __getattr__(self, item):
        # print(item,type(item))
        # self.file.read
        return getattr(self.file,item)

f1=FileHandle(a.txt,w+)
# print(f1.file)
# print(f1.__dict__)
# print(‘==>‘,f1.read) #触发__getattr__
# print(f1.write)
f1.write(1111111111111111\n)
f1.write(cpu负载过高\n)
f1.write(内存剩余不足\n)
f1.write(硬盘剩余不足\n)
# f1.seek(0)
# print(‘--->‘,f1.read())
View Code

 

继承的方式完成包装

标签:color   one   ini   一个   opened   open   append   cpu   __init__   

原文地址:https://www.cnblogs.com/wuweixiong/p/10607737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!