定制自己的数据类型:
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‘]
包装一个类型通常是对已存在类型的一些定制,这种做法可以新建、修改或删除原有产品的功能。其他的则保持原样。
授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就授权给对象的默认属性
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())
原文地址:https://www.cnblogs.com/wuweixiong/p/10607737.html
时间: 2024-10-12 11:12:21