Python装饰器实战:从普通函数到类方法的参数化应用

季宁
季宁
发布时间:2026-10-13 | 2人浏览过
原创

本文深入解析Python装饰器的核心用法,涵盖对普通函数的时间统计、类中无参方法的装饰以及带参装饰器的实现。通过具体代码示例,展示如何利用装饰器实现类似Spring AOP的功能,包括执行前后处理、日志记录及权限拦截,帮助开发者掌握高阶Python编程技巧。

Python装饰器概述

本文详细解析Python中装饰器的常见应用场景,旨在为读者提供实用的参考案例。

Python装饰器可用于实现类似Spring AOP的功能,例如在方法执行前后执行特定逻辑、记录日志或统计运行时间,甚至可用于权限拦截。以下将从三个维度阐述Python装饰模式的具体用法:

1. 对普通函数的装饰

2. 对类中方法的装饰(无需参数)

3. 对类中方法的装饰(需传递参数)

普通函数装饰:执行时间统计

一、普通函数的装饰示例:以计算函数执行时间为例。


#coding:utf-8
import time
def timeit(func):
  def wrapper(*args, **kv):
    start = time.clock()
    print '开始执行'
    func(*args, **kv)
    end =time.clock()
    print '花费时间:', end - start
  return wrapper
@timeit
def foo():
  print 'in foo()'
if __name__=='__main__':
  foo()

运行结果如下:

开始执行 in foo() 花费时间: 6.55415628267e-05

由此可见,通过装饰器可以便捷地计算时间差,而无需在普通函数内部手动编写计时逻辑。

类方法装饰:无参场景

二、类中方法的装饰(无需参数场景)


#coding:utf-8
import time
def timeit(func):
  def wrapper(*args, **kv):
    start = time.clock()
    print '开始执行'
    func(*args, **kv)
    end =time.clock()
    print '花费时间:', end - start
  return wrapper
class MySpendTime(object):
  def __init__(self):
    pass
  @timeit
  def foo(self):
    print 'in foo()'
spendtime=MySpendTime()
spendtime.foo()

运行结果如下:

开始执行 in foo() 花费时间: 4.42208134735e-05

类方法装饰:带参场景

三、类中方法的装饰(需传递参数场景)


#coding:utf-8
'''
Created on 2012-11-1
@author: yihaomen.com
'''
def UpdateUI(msg, step):
  print u"内容:", msg
  print u"步骤:到第%s步了" % step
  def dec(func):
    def wapper(self, *args, **kwargs):
      func(self,*args, **kwargs)
    return wapper
  return dec
class Command(object):
  def Excute(self):
    self.Work1st()
    self.Work2nd()
    self.Work3rd()
  @UpdateUI("开始第一步","1")
  def Work1st(self):
    print "Work1st"
  @UpdateUI("开始第二步", 2)
  def Work2nd(self):
    print "Work2nd"
  @UpdateUI("开始第三步", 3)
  def Work3rd(self):
    print "Work3rd"
if __name__=="__main__":
  command = Command()
  command.Excute()

运行结果如下:

内容: 开始第一步 步骤:到第1步了 内容: 开始第二步 步骤:到第2步了 内容: 开始第三步 步骤:到第3步了 Work1st Work2nd Work3rd

如需了解更多Python相关知识,可参考本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。

希望本文的内容能对您的Python程序设计工作有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表