首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。