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

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

Python包装授权

时间: 2024-11-03 16:32:45

Python包装授权的相关文章

python类 包装 授权

"包装"是指对一个已经存在的对象进行系定义加工. 实现授权是包装的一个特性.包装一个类型通常是对已存在的类型进行一些自定义定制,这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变.授权的过程,其实也就是所有的更新功能都交给新类的自定义的某部分功能来处理,但已存在的功能就授权给对象的默认属性. 实现授权的关键点是覆盖__getattr__()方法,在代码中包含一个对getattr()内建函数的调用,调用getattr()得到默认对象的属性,并返回它以便访问或者调用. 用组

【Python】 zabbixAPI的包装pyzabbix

pyzabbix pyzabbix是zabbixAPI的第三方python包装.从网上莫名其妙地搞到了一份源码,看了一下之后发现实现方法还蛮巧妙的,感觉挺好的就记下来了.那些个源码本身其实也是一个个单独操作的脚本,可以用命令行参数直接操作.pyzbx用了json来encode和decode请求数据和返回数据,并且用了urllib2中的一些方法来进行通讯 如果不是直接用它的脚本,而是自己定制相关程序的话基本上只用到ZabbixAPI这个类: from pyzabbix import ZabbixA

Awesome Python,Python的框架集合

Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management 环境管理 Package Management              软件包管理 Package Repositories              软件源 Distribution          

Python GUI编程各种实现的对比

Python GUI编程各种实现的对比 从 Python 语言的诞生之日起,就有许多优秀的 GUI 工具集整合到 Python 当中,这些优秀的 GUI 工具集,使得 Python 也可以在图形界面编程领域当中大展身手,由于 Python 的流行,许多应用程序都是由 Python 结合那些优秀的 GUI 工具集编写的.下面分别介绍 Python GUI 编程的各种实现,下面的许多内容都是来自维基百科(文章后面列出了参考),这里就当做是一个没有技术色彩的整合吧. 1.Tkinter 简单介绍: 是

Awesome Python(中文对照)

A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management 环境管理 Package Management              软件包管理 Package Repositories              软件源 Distribution                         

Python之旅(八)面向对象02

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super 类的派生类(子类) class Animal(): pass class Dog(Animal): pass d1 = Dog() # 检查d1是不是Dog的一个对象 print(isinstance(d1, Dog)) print(issubclass(Dog

Python连载59-HTTP首部字段和消息头,Thinker简介

一.首部字段或者消息头 1.下面几个类型都是请求的: User-Agent:关于浏览器和它平台的消息,如Mozilla5.0 Accept:客户端能处理的页面的类型,如text/html Accept-Charset:客户端可以接受的字符集,如unicode-1-1 Accept-Encoding:客户端能处理的页面编码方式,如gzip Accept-Language:客户端能处理的自然语言,如en(英语).zh-en(简体中文) Host:服务器的DNS名称,从URL中提取出来,必需 Auth

python 资产管理

python 资产管理 一.Agent 方式 1.这个方法的优点:使用简单,速度快,适合服务器较多场景使用,缺点:服务器比较占资源,性能会变低. 2.使用Agent的前提条件是客户端(服务器)特别多的时候使用这种方法. 3.Agent方法原理是在每一台服务器上部署python脚本代码(拷贝到服务器),然后再从每一台服务器中获取硬件信息 4.每一个客户端都会把数据发送给api然后再通过api把每个服务器的信息发送个数据库 Agent 每一个客户端执行的 import subprocess impo

详解 Python 中的下划线命名规则

在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): Fil