zoukankan      html  css  js  c++  java
  • python学习之包装与授权

    实现授权的关键点就是覆盖__getattr__()方法,在代码中包含一个对getattr()内建函数的调用。
    特别调用getattr()以得到默认对象属性(数据属性或者方法)并返回它以便访问或调用。

    特殊方法__getattr__()的工作方式是,当搜索一个属性时,任何局部对象首先被找到(定制的对象)。如果搜索
    失败了,则__getattr__()会被调用,然后调用getattr()得到一个对象默认行为。

    当引用一个属性时,解释器将试着在局部名称空间中查找那个名字,比如一个自定义的方法或局部实例属性。
    如果没有在局部字典中找到,则搜索类名名称空间,以防一个类属性被访问。最后,如果两类搜索都失败了,
    搜索则对原对象开始授权请求,此时,__getattr__()会被调用。

    授权(也是一种包装,关键点是覆盖__getattr__方法)
    基于基本类型定制自己的类型
    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 ')
    f1.write('cpu负载过高 ')
    f1.write('内存剩余不足 ')
    f1.write('硬盘剩余不足 ')
    # f1.seek(0)
    # print('--->',f1.read())

    包装

    二次加工标准类型(包装继承加派生实现)
    class List(list):
        def append(self, p_object):
            if type(p_object) is str:
                # self.append(p_object)   #导致无限递归
                super().append(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)

  • 相关阅读:
    CB文件读入后输出中文乱码问题
    2019-ICPC-沈阳站打铁感想
    计蒜客习题:画图游戏(Havel-Hakimi定理)
    计蒜客练习题:接龙(带权并查集)
    搜索----Dungeon Master
    最短路 poj1502 MPI Maelstrom
    poj 3259 Wormholes
    Silver Cow Party
    Til the Cows Come Home
    Cow Contest
  • 原文地址:https://www.cnblogs.com/jinpingzhao/p/12659619.html
Copyright © 2011-2022 走看看