zoukankan      html  css  js  c++  java
  • 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
    ")
    f1.write("cpu负载过高
    ")
    f1.write("内存剩余不足
    ")
    f1.write("硬盘剩余不足
    ")
    
    f1.seek(0)
    print(f1.read())
    
    
    # sys_f=open("b.text","w")
    # print(getattr(sys_f,"read"))
    如果我失败了,至少我尝试过,不会因为痛失机会而后悔
  • 相关阅读:
    BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆
    BZOJ_2216_[Poi2011]Lightning Conductor_决策单调性
    BZOJ_2208_[Jsoi2010]连通数_强连通分量+拓扑排序+手写bitset
    BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量
    BZOJ_3545_[ONTAK2010]Peaks_主席树+倍增+kruscal重构树+dfs序
    BZOJ_1671_[Usaco2005 Dec]Knights of Ni 骑士_BFS
    BZOJ_3566_[SHOI2014]概率充电器_概率+树形DP
    自动驾驶课程学习
    java:String使用equals和==比较的区别
    为什么java的main方法必须是静态的
  • 原文地址:https://www.cnblogs.com/tangcode/p/11388969.html
Copyright © 2011-2022 走看看