前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python包装授权

Python包装授权

作者头像
py3study
发布2020-01-07 16:36:18
7150
发布2020-01-07 16:36:18
举报
文章被收录于专栏:python3

    1、什么是包装

代码语言:javascript
复制
# -*- 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、什么是授权

代码语言:javascript
复制
# -*- 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、总结:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档