Python包装授权

发布时间:2019-09-20 07:31:55编辑:auto阅读(2033)

        1、什么是包装

    # -*- coding : utf-8 -*-
    """
        包装类,就是给被包装的类加个壳;被包装内实现壳的内部,而包装内提供壳的外部(接口),有点类似于继承关系,
        不过也不完全时,因为通过继承也可以实现包装效果,不使用继承同样可以实现包装效果。下面通过一个例子来展示
        包装的概念
    """
    
    class PackageList(object):
        "包装List类型,使用非继承实现"
    
        def __init__(self):
            "构造方法,建立一个内部list对象"
            self.innerList = []
    
        def add(self, element):
            "添加一个元素"
            self.innerList.append(element)
    
        def remove(self, element):
            "删除一个元素"
            self.innerList.remove(element)
    
        def extend(self, elements):
            "扩展一个元素或者一个列表"
            if isinstance(elements, list):
                self.innerList.extend(elements)
            else:
                self.innerList.append(elements)
    
        def get(self, start = 0, end = -1, step = 1):
            "获取列表,或者某个元素,或者某个区域的元素"
            if isinstance(start, int) and isinstance(end, int) and isinstance(step, int):
                if end == -1:
                    return self.innerList[start::step]
                else:
                    return self.innerList[start : end : step]
    
            else:
                raise TypeError
    
    if __name__ == "__main__":
        packageList = PackageList()
        # 添加一个元素
        packageList.add(1)
        # 添加一个序列
        packageList.extend([2, 3, 4])
        # 删除一个元素
        packageList.remove(3)
        # 获取列表
        print(packageList.get())

        2、什么是授权

        

    # -*- coding : utf-8 -*-
    
    """
        授权:通俗点讲就是谁给谁权利,拥有权利的一方(授权方),授予给没有权利的一方(被授权方)。
        那么python是通过什么来获取权利,或者说是如何接受授权;关键是使用__getattr__内建函数,
        在python中,使用一个属性时,先到局部搜索,然后到类搜索,最后调用__getattr__函数,由于
        这一点,我们可以通过这个函数去获取某个对象的权限(属性)。
        注:
            属性:变量和方法
    """
    
    class FileAuthorization(object):
        "实现文件对象授权"
    
        # obj : 授权方
        def __init__(self, obj):
            self.__data = obj
    
        # 重写__getattr__
        def __getattr__(self, attr):
            "使用内建getattr获取某个对象的属性,当python解析器在类实例和类中都没有搜索到属性时,调用"
            return getattr(self.__data, attr)
    
    if __name__ == "__main__":
        file = FileAuthorization(open("./data.txt", 'w'))
        file.writelines(["test1\n", "test2\n"])
        file.flush()
        file.close()


        3、总结:

        包装和授权往往使用在定制某种类,其实现的多样性,只要你能想的到,就可以出现千变万化的授权、包装实现方式,上述仅仅提供参考。

关键字