python 授权

1.“包装”意思是一个已经存在的对象进行包装,不管他是数据类型还是一段代码,可以是对一个已经存在的对象增加新的,删除不要的或者修改其他已经存在的功能

2.包装 包括定义一个类,他的实例拥有标准类型的核心行为,换句话说,他现在不仅能唱能跳,还能像原类型一样步行。 
 
这个图片说明了在类中包装的类型看起来像什么样子,在图的中心为标准类型的核心行为,但他也通过新的或者最新的功能,甚至可能通过访问实际数据的不同方法得到提高

3.实现授权是包装的一个特性,可用于简化处理相关命令性功能,采用也存在的功能以达到最大限度的代码重用。

4.实现授权的关键点是覆盖__getattr__() 方法,在代码中包含一个对getattr()内建函数的调用,调用getattr()得到默认对象的属性(数据属性或者方法)并返回他以便于访问或者调用。

#! /usr/bin/env python
#coding:utf-8

"""
包装对象的授权

"""

class WrapMe(object):
    def __init__(self,obj):
        self.__obj=obj;

    def get(self):
        return self.__obj

    def __str__(self):
        return self.__obj

    __repr__=__str__

    def __getattr__(self, item):
        "这个方法用于实现授权,即返回的对象可以使用接受到的对象的属性(方法,函数),但是不能使用原有对象的特殊行为"
        return getattr(self.__obj,item)

#以复数为例
m=WrapMe(3.5+4.2j)
print m.real    #3.5 这就是复数这个对象的方法,此时因为进行了授权,我们任然可以使用复数的属性
"""
搜索属性的顺序是 解释器将试着在局部名称空间中查找哪个名字,如果没有就搜索类名称空间,最后如果两个搜索都是失败了,搜索则对原对象开始授权请求,此时__getattr__()会被调用
"""

"getattr()这个函数没有办法做到让对象使用原有对象的特殊行为,比如列表的切片属性"
m1=WrapMe([‘a‘,‘b‘,‘c‘])
#print m1[1]   #TypeError: ‘WrapMe‘ object does not support indexing
#这就是为什么我们要在类中创建一个get()函数,他返回了原来的对象
m_list=m1.get()
print m_list[1]  #b 成功解决问题

"""
对比
"""
class WrapMe_compare(object):
    def __init__(self,obj):
        self.__obj=obj;

    def get(self):
        return self.__obj

    def __str__(self):
        return self.__obj

    __repr__=__str__

mc=WrapMe_compare(3.5+4.2j)
#print mc.real()  #AttributeError: ‘WrapMe_compare‘ object has no attribute ‘real‘  这就是没有进行授权

5.包装标准类型

#!/usr/bin/env python
#coding:utf-8

"""
包装标准类型
"""
from time import time,ctime,sleep

class TimeWrapMe(object):
    def __init__(self,obj):
        self.__data=obj;
        self.__mtime=self.__ctime=self.__atime=time();

    def get(self):
        "获取属性,需要修改访问时间"
        self.__atime=time();
        return self.__data;

    def gettimeval(self,t_type):
        if not isinstance(t_type,str) or t_type not in ‘cma‘:
            raise TypeError,"argument of ‘c‘,‘m‘,‘a‘";
        return getattr(self,"_%s__%stime"%(self.__class__.__name__,t_type));   #相当于getattr(self,_TimeWrapMe__(c|m|a)time),传过去的是修改,更新,创建的时间

    def gettimestr(self,t_type):
        "获取时间,返回一个经time.ctime()函数格式化的字符串形式的时间"
        """
        ctime(seconds) -> string
        """
        return ctime(self.gettimeval(t_type));

    def set(self,obj):
        "修改实例属性,同时自动刷新修改时间"
        self.__mtime=time();
        self.__data=obj;

    def __repr__(self):
        self.__atime=time();
        return self.__data;

    def __str__(self):
        self.__atime=time();
        return str(self.__data);

    def __getattr__(self, item):
        "授权"
        self.__atime=time();
        return getattr(self.__data,item);

t=TimeWrapMe(932)
print t.gettimestr(‘c‘)
print t.gettimestr(‘m‘)
print t.gettimestr(‘a‘)
print "{:*^30}".format(‘*‘)
sleep(3)    #3秒之后再次进行访问
print t.get()
print t.gettimestr(‘c‘)
print t.gettimestr(‘m‘)
print t.gettimestr(‘a‘)

结果:
Mon Sep 26 13:04:16 2016
Mon Sep 26 13:04:16 2016
Mon Sep 26 13:04:16 2016
******************************
932
Mon Sep 26 13:04:16 2016
Mon Sep 26 13:04:16 2016
Mon Sep 26 13:04:19 2016  #访问时间发生了改变

原文地址:https://www.cnblogs.com/ggzhangxiaochao/p/9044947.html

时间: 2024-10-13 00:23:42

python 授权的相关文章

2014 年最热门的国人开发开源软件 TOP 100

不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是开源不可忽视的力量. 而我们这个榜单也是从这些国人开发.主要参与开发或者基于国外开源软件进行改进并形成独立版本的软件中,根据该软件的访问.收藏.下载等多个角度,从而得出前 100 名最受欢迎的开源软件.我们所评选出来的软件并非同类型,尽管放在一起不是很科学,但我们仍希望通过我们的视角让大家对国内一些

2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区

不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是开源不可忽视的力量. 而我们这个榜单也是从这些国人开发.主要参与开发或者基于国外开源软件进行改进并形成独立版本的软件中,根据该软件的访问.收藏.下载等多个角度,从而得出前 100 名最受欢迎的开源软件.我们所评选出来的软件并非同类型,尽管放在一起不是很科学,但我们仍希望通过我们的视角让大家对国内一些

我看中国开源软件社区现状与未来

开源(Open Source,开放源码)被非盈利软件组织(美国的Open Source Initiative协会)注册为认证标记,并对其进行了正式的定义,用于描述那些源码可以被公众使用的软件,并且此软件的使用.修改和发行也不受许可证的限制. 随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向成熟,逐步发展成为一种主流模式,日益改变着全世界软件产业的发展轨迹.如果留意的话就会发现开源软件已经

2014 top100

下面是 TOP 100 的软件列表: 1. JFinal JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再拥有 ruby.python.php 等动态语言的开发效率! 开发语言:Java授权协议:Apache源码下载:http://git.oschina.net/jfinal/jfinal软件作者:@JFinal 2. Dubbo Dubbo 是阿里巴巴

2014年最热门的国人开发开源软件TOP100

2014年最热门的国人开发开源软件TOP100 不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是开源不可忽视的力量. 而我们这个榜单也是从这些国人开发.主要参与开发或者基于国外开源软件进行改进并形成独立版本的软件中,根据该软件的访问.收藏.下载等多个角度,从而得出前 100 名最受欢迎的开源软件.我们所评选出来的软件并非同类型,尽管放在一起不是很

2014 年最热门的国人开发开源软件TOP 100

不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外认可.中国是开源不可忽视的力量. 而我们这个榜单也是从这些国人开发.主要参与开发或者基于国外开源软件进行改进并形成独立版本的软件中,根据该软件的访问.收藏.下载等多个角度, 从而得出前 100 名最受欢迎的开源软件.我们所评选出来的软件并非同类型,尽管放在一起不是很科学,但我们仍希望通过我们的视角让大家对国内一些

python-pandas读取mongodb、读取csv文件

续上一篇博客(‘’selenium爬取NBA并将数据存储到MongoDB‘)https://www.cnblogs.com/lutt/p/10810581.html 本篇的内容是将存储到mongo的数据用pandas读取出来,存到CSV文件,然后pandas读取CSV文件. 其中mongo的操作涉及到授权的问题: 如果遇到报错关于authenticate的,需要加授权,用时需要将各参数换成自己的 #导入相应的包 import pymongo import pandas as pd from pa

selenium爬取NBA并将数据存储到MongoDB

from selenium import webdriver driver = webdriver.Chrome() url = 'https://www.basketball-reference.com/leagues/NBA_2019.html' driver.get(url)# 操作等待 driver.implicitly_wait(3) list_name = driver.find_elements_by_xpath('//*[@id="team-stats-per_game"

csv文件数据导出到mongo数据库

from pymongo import MongoClientimport csv# 创建连接MongoDB数据库函数def connection(): # 1:连接本地MongoDB数据库服务 conn=MongoClient("localhost",27017) # 2:连接本地数据库(guazidata).没有时会自动创建 db=conn.python # 3:创建集合 set1=db.data # 4:授权 db.authenticate(name='zhaochuan', p