python面向对象--包装标准类型及组合方式授权

时间:2019-08-21
本文章向大家介绍python面向对象--包装标准类型及组合方式授权,主要包括python面向对象--包装标准类型及组合方式授权使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
# 实现授权是包装的一个特性。包装一个类型通常是对已存在的类型进行一些自定义定制,
# 这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变。
# 授权的过程,其实也就是所有的更新功能都交给新类的自定义的某部分功能来处理,但已存在的功能就授权给对象的默认属性。


class List(list):


    def append(self, object):#append添加的列表必须是字符串类型
        print(object)
        if type(object) is str:
            #包装标准类型实现功能
            # list.append(self,object)
            super().append(object)
        else:
            print("只能添加字符串")




    def show_midle(self):
        midel_index=int(len(self)/2)
        return self[midel_index]



# l2=list("hello world")
# print(l2,type(l2))


ll=List("helloworld")

print(ll,type(ll))

print(ll.show_midle())


ll.append("111")

print(ll)
#授权:授权是包装的一个特性,包装一个类型通常是对已存在的类型的一些定制
#这种方法,可以新建,修改或删除原有产品的功能,其他的则保持原样,授权的过程,及是所有更新的功能都是由新类
#的某部分来处理,但已存在的功能就授权给对象的默认属性



#实现授权的关键点是覆盖__getattr__方法
import time
class Filehandle():
    def __init__(self,filename,mode="r",encoding="utf-8"):
        self.mode=mode
        self.filename=open(filename,mode,encoding=encoding)
        self.encoding=encoding

    # def read(self):
    #     pass
    #
    # def write(self):
    #     pass


    # def write(self,line):
    #     # print("----------->",line)
    #     t=time.strftime("%Y-%m-%d %X")
    #     self.filename.write(("%s %s"%(t,line) ))



    def __getattr__(self, item):
        print(item,type(item))
        return getattr(self.filename,item)#self.filename 内存地址  item(read方法 str类型)



f1=Filehandle("a.text","w+","utf-8")

# print(f1.filename)
# print(f1.__dict__)
# print(type(f1.read()))#触发__getattr__


f1.write("11\n")
f1.write("cpu负载过高\n")
f1.write("内存剩余不足\n")
f1.write("硬盘剩余不足\n")

f1.seek(0)
print(f1.read())


# sys_f=open("b.text","w")
# print(getattr(sys_f,"read"))

原文地址:https://www.cnblogs.com/tangcode/p/11388969.html