热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python装饰器代码_python装饰器关键代码

带参数的装饰器__author__‘similarface‘importsysimportloggingimportfunctoolslogging.basicConfig(str

带参数的装饰器__author__ = ‘similarface‘

import sys

import logging

import functools

logging.basicConfig( stream=sys.stderr, level=logging.DEBUG )

def decorator(config):

def concrete_decorator(function):

def wrapped( *args, **kw ):

return function( *args, ** kw )

return wrapped

return concrete_decorator

def debug_named(log_name):

def concrete_decorator(function):

@functools.wraps( function )

def wrapped( *args, **kw ):

log= logging.getLogger( log_name )

log.debug( "%s( %r, %r )", function.__name__, args, kw, )

result= function( *args, **kw )

log.debug( "%s = %r", function.__name__, result )

return result

return wrapped

return concrete_decorator

@debug_named( "recursion" )

def ackermann( m, n ):

if m == 0: return n+1

elif m > 0 and n == 0: return ackermann( m-1, 1 )

elif m > 0 and n > 0: return ackermann( m-1, ackermann( m, n-1 ) )

print( ackermann(2,4) )类方法装饰器import sys

import logging

import functools

def audit( method ):

@functools.wraps(method)

def wrapper( self, *args, **kw ):

audit_log= logging.getLogger( ‘audit‘ )

before= repr(self)

try:

result= method( self, *args, **kw )

after= repr(self)

except Exception as e:

audit_log.exception( ‘%s before %s\n after %s‘, method.__qualname__, before, after )

raise

audit_log.info( ‘%s before %s\nafter %s‘, method.__qualname__, before, after )

return result

return wrapper

class Person:

def __init__( self,*address ):

self.address=list(address)

@audit

def __iadd__( self, addr ):

self.address.append(addr)

return self

def __repr__( self ):

address= ", ".join( map(str,self.address) )

return "{__class__.__name__}({addr})".format(__class__=self.__class__, addr=address)

logging.basicConfig( stream=sys.stderr, level=logging.DEBUG )

p= Person("北京","上海","天津")

p.__iadd__(‘广东‘)

类装饰器__author__ = ‘similarface‘

import sys

import logging

logging.basicConfig( stream=sys.stderr, level=logging.DEBUG )

def logged(class_):

class_.logger=logging.getLogger(class_.__qualname__)

return class_

@logged

class Person:

def __init__(self,name):

self.name=name

self.logger.info("Good")

def method(self,*args):

self.logger.info("method %r",args)

@logged

class Student(Person):

def __init__(self,g):

self.name=g

self.logger.info("Good")

def study(self,*args):

self.logger.info("method %r",args)

p=Person("similarface")

p.method("Nice day")

s=Student("similarface")

s.method("Nice a day")



推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
涛涛哈帅_365
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有