python高级编程之描述符与属性02
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#元描述符
#特点是:使用宿主类的一个或者多个方法来执行一个任务,可能对降低使用提供步骤的类所需要的代码量很有用,比如一个链式描述符可以调用类的一系统方法以返回一组结果,它可以在失败的时候停止,并且配备一个回调机制以获得对过程更多控制,如下
class Chainer(object):
def __init__(self,a,b=NotImplementedError):
self._a=a
self._b=b
def __get__(self, instance, owner):
if instance is None:
#只针对实例
return self
result=[]
for methond in self._a:
result.append(methond(instance))
if self._b is not None:
if not self._b(instance,methond,result):
break
return result
#这一实现各种类方法之上运行计算能与记录器这样的外部元素结合起来,如下
class TextProcess(object):
def __init__(self,text):
self.text=text
def normalize(self):
if isinstance(self.text,list):
self.text=[t.lower() for t in self.text]
else:
self.text=self.text.lower()
def split(self):
if not isinstance(self.text,list):
self.text=self.text.split()
def treshold(self):
if not isinstance(self.text,list):
if len(self.text)<2:
self.text=''
self.text=[w for w in self.text if len(w)>2]
def logger(insetace,method,results):
print 'calling %s'%method.__name__
return True
def add_sequen_ce(name,sequence):
setattr(TextProcess,name,Chainer([getattr(TextProcess,n)for n in sequence],logger))
#add_sequen_ce用来动态的定义一个新链式调用方法的描述符,这一个组合结果可以被保存在类定义中,如下
add_sequen_ce('simoke_clean',('split','trshold'))
my=TextProcess('My Taylor is Rich')
my.simple_chean
my.text
#执行另一个序列
add_sequen_ce('simoke_clean',('normailze','split','trshold'))
my.simple_chean
my.text
#由于python动态特性,可以在运行时再添加这种描述符以执行元编程
#定义
"""
元编程(meta-programming)在运行时通过添加新的计算功能,或者改变已有功能来改变程序行为的一种技巧,与的编程不同,在其他语言中,需要创建新的代码块,而不是提供可以应对最多情况简单代码块
它也和{生成性编程{generative programming}}不同,这样编程方式通过模块来生成一段静态源代码,可以看:en.wikipedia.org/wiki/generative programming
"""
python高级编程之描述符与属性02的更多相关文章
- python高级编程之描述符与属性03
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #属性Property #提供了一个内建描述符类型,它知道如何将一个 ...
- python高级编程之最佳实践,描述符与属性01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的 ...
- python描述符和属性查找
python描述符 定义 一般说来,描述符是一种访问对象属性时候的绑定行为,如果这个对象属性定义了__get__(),__set__(), and __delete__()一种或者几种,那么就称之为描 ...
- Python 属性描述符和属性的查找过程
属性描述符可以用来控制给属性赋值的时候的一些行为 import numbers class IntField: def __get__(self, instance, owner): return s ...
- python高级编程读书笔记(一)
python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...
- Python高级编程和异步IO并发编程
第1章 课程简介介绍如何配置系统的开发环境以及如何加入github私人仓库获取最新源码. 1-1 导学 试看 1-2 开发环境配置 1-3 资源获取方式第2章 python中一切皆对象本章节首先对比静 ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- python高级编程:有用的设计模式3
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
随机推荐
- JS~对img标签进行优化,使用onerror进行默认图像显示
对于网站图像的不显示有很多原因,网络问题,文件本身问题,文件URL问题等,而当图像加载失败时会触发onerror这个事件,我们利用这点,可以有效的避免图像加载失败的尴尬! JS代码 //图像加载出错时 ...
- Hibernate的查询 HQL查询 查询某几列
HQL 是Hibernate Query Language的简写,即 hibernate 查询语言:HQL采用面向对象的查询方式.HQL查询提供了更加丰富的和灵活的查询特性,因此Hibernate将H ...
- python学习-day3
今天是第三天学习,加油! 第一部分 集合 一.集合 1.什么是集合以及特性? 特性:无序的,不重复的序列,可嵌套. 2.创建集合 方法一:创建空集合 s1 = set() print(type(s1) ...
- 使用CMD连接SQL Server
在CMD中操作数据库,界面不美观,而且排版不整齐,但在机器上没有安装SQLSERVER的时候,也是极其方便的. 在命令行中输入 OSQL ?可以获得所有帮助信息 osql -S 数据库服务 ...
- (转)Ajax的原理和应用
1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...
- Tomcat项目部署方式
一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JS ...
- nginx配置时的一些问题
在配置nginx的时候出现的一些问题,在此记录: 1.如何打开nginx服务: 方法1:打开解压的下载文件,双击打开nginx.exe即可(出现闪退,我以为是出问题了,其实是服务已经启动了) 方法2: ...
- DNF(一.YUM已死,DNF代之)
Yum还没学好呢,突然听到已经要被抛弃了.恐慌至极.. 在最新版的Fedora 22 抛弃了Yum包管理器,取而代之的是DNF.. 那么搜搜 Fedora 22 Release Note.. 官方给出 ...
- 浅析 JavaScript 组件编写
之前因项目需要也编写过一些简单的JS组件,大多是基于JQuery库的,一直也没有过总结,导致再次写到的时候还去Google, 近日看到一个文章总结的挺好,拿过整理一下做个备忘. 此次同样是基于jque ...
- 转载: js jquery 获取当前页面的url,获取frameset中指定的页面的url(有修改)
转载网址:http://blog.csdn.net/bestlxm/article/details/6800077 js jquery 怎么获取当前页面的url,获取frameset中指定的页面的ur ...