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