“公孙乌龙白桃”通过精心收集,向本站投稿了3篇巧用Python装饰器 免去调用父类构造函数的麻烦,以下是小编整理后的巧用Python装饰器 免去调用父类构造函数的麻烦,希望能够帮助到大家。
篇1:巧用Python装饰器 免去调用父类构造函数的麻烦
最近更 新
Python群发邮件实例代码
python中将阿拉伯数字转换成中文的实现代
python函数缺省值与引用学习笔记分享
python zip文件 压缩
python 字典(dict)遍历的四种方法性能测试
python中文乱码的解决方法
理解python多线程(python多线程简明教程
Python使用稀疏矩阵节省内存实例
从零学Python之入门(二)基本数据类型
使用setup.py安装python包和卸载python包
热 点 排 行
Python入门教程 超详细1小时学会
python 中文乱码问题深入分析
比较详细Python正则表达式操作指
Python字符串的encode与decode研
Python open读写文件实现脚本
Python enumerate遍历数组示例应
Python 深入理解yield
Python+Django在windows下的开发
python 文件和路径操作函数小结
python 字符串split的用法分享
篇2:python使用装饰器和线程限制函数执行时间的方法
作者:lele 字体:[增加 减小] 类型:
这篇文章主要介绍了python使用装饰器和线程限制函数执行时间的方法,主要涉及timelimited函数的使用技巧,非常具有实用价值,需要的朋友可以参考下
本文实例讲述了python使用装饰器和线程限制函数执行时间的方法,分享给大家供大家参考。具体分析如下:
很多时候函数内部包含了一些不可预知的事情,比如调用其它软件,从网络抓取信息,可能某个函数会卡在某个地方不动态,这段代码可以用来限制函数的执行时间,只需要在函数的上方添加一个装饰器,timelimited(2)就可以限定函数必须在2秒内执行完成,如果执行完成则返回函数正常的返回值,如果执行超时则会抛出错误信息。
# -*- coding: utf-8 -*-from threading import Threadimport timeclass TimeoutException(Exception): passThreadStop = Thread._Thread__stop#获取私有函数def timelimited(timeout): def decorator(function): def decorator2(*args,**kwargs):class TimeLimited(Thread): def __init__(self,_error= None,): Thread.__init__(self) self._error = _error def run(self): try:self.result = function(*args,**kwargs) except Exception,e:self._error =e def _stop(self): if self.isAlive:ThreadStop(self)t = TimeLimited()t.start()t.join(timeout)if isinstance(t._error,TimeoutException): t._stop() raise TimeoutException(‘timeout for %s‘ % (repr(function)))if t.isAlive(): t._stop() raise TimeoutException(‘timeout for %s‘ % (repr(function)))if t._error is None: return t.result return decorator2 return decorator@timelimited(2)def fn_1(secs): time.sleep(secs) return ‘Finished‘if __name__ == “__main__”: print fn_1(4)
希望本文所述对大家的Python程序设计有所帮助,
篇3:Python中使用装饰器和元编程实现结构体类实例
Python中使用装饰器和元编程实现结构体类实例,本文的方法算是一种Python的黑魔法技术,并非Python的常规写法,需要的朋友可以参考下
Ruby中有一个很方便的Struct类,用来实现结构体,这样就不用费力的去定义一个完整的类来仅仅用作访问属性。
代码如下:
class Dog < Struct.new(:name, :age)
end
fred = Dog.new(“fred”, 5)
printf “name:%s age:%d”, fred.name, fred.age
##name:fred age:5
Python3.4中也可以这么干,但写法很累赘。其中包含self.name = name 这种很烦人的写法。
代码如下:
class Dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
fred = Dog(“fred”, 5)
print(‘name:{name} age:{age}‘.format(name=fred.name, age=fred.age))
##name:fred age:5
想到我大Python是无所不能的,有没有一种简化结构体类属性定义的方法呢?答案肯定是有的,
在补习了一些Python黑魔法技术后,我想到利用装饰器函数和元编程技术来实现。
代码如下:
def struct(*name):
“”“ 装饰器函数
用途:用于在类定义中,自动设置self.value = value
”“”
def decorator(func):
def wrapper(*args, **kw):
for i in range(len(name)):
setattr(args[0], name[i], args[i+1])
return func(*args, **kw)
return wrapper
return decorator
class Dog(object):
@struct(‘name‘,‘age‘) #黑魔法所在!
def __init__(self, *all_value):
pass
fred = Dog(“fred”, 5)
print(‘name:{name} age:{age}‘.format(name=fred.name, age=fred.age))
##name:fred age:5
要注意的是,这种写法会造成代码结构的不清晰。
★ Python在Windows和在Linux下调用动态链接库的教程
巧用Python装饰器 免去调用父类构造函数的麻烦(精选3篇)




