• 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"))
    如果我失败了,至少我尝试过,不会因为痛失机会而后悔
  • 相关阅读:
    jquery click()方法模拟点击事件对a标签不生效
    键盘keyCode
    java配置好jdk-bash: /usr/bin/java: No such file or directory
    iptables配置顺序-两条规则会忽略后边的
    一些非常实用的JSON 教程
    C#实现json的序列化和反序列化
    [asp.net]C#实现json的序列化和反序列化
    一些JSON 教程
    js+JQuery实现返回顶部功能
    HTML标签总结
  • 原文地址:https://www.cnblogs.com/tangcode/p/11388969.html
Copyright © 2020-2023  润新知