首页 > 代码库 > Python包装授权

Python包装授权

    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、总结:

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

本文出自 “java程序冥” 博客,请务必保留此出处http://793404905.blog.51cto.com/6179428/1533610