基于Python 装饰器装饰类中的方法

下面为大家分享一篇基于python 装饰器装饰类中的方法实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧

title: Python 装饰器装饰类中的方法

comments: true
date: 2017-04-17 20:44:31
tags: [‘Python’, ‘Decorate’]
category: [‘Python’]

目前在中文网上能搜索到的绝大部分关于装饰器的教程,都在讲如何装饰一个普通的函数。本文介绍如何使用Python的装饰器装饰一个类的方法,同时在装饰器函数中调用类里面的其他方法。本文以捕获一个方法的异常为例来进行说明。

有一个类Test, 它的结构如下:

立即学习“Python免费学习笔记(深入)”;

class Test(object): def __init__(self):  pass def revive(self):  print('revive from exception.')  # do something to restore def read_value(self):  print('here I will do something.')  # do something.

登录后复制

在类中有一个方法read_value(),这个方法在多个地方被调用。由于某些原因,方法read_value有可能随机抛出Exception导致程序崩溃。所以需要对整个方法做try … except处理。最丑陋的做法如下面的代码所示:

class Test(object): def __init__(self):  pass def revive(self):  print('revive from exception.')  # do something to restore def read_value(self):  try:   print('here I will do something.')   # do something.  except Exception as e:   print(f'exception {e} raised, parse exception.')   # do other thing.   self.revive()

登录后复制

这样写虽然可以解决问题,但是代码不Pythonic。

使用装饰器来解决这个问题,装饰器函数应该写在类里面还是类外面呢?答案是,写在类外面。那么既然写在类外面,如何调用这个类的其他方法呢?

首先写出一个最常见的处理异常的装饰器:

def catch_exception(origin_func): def wrapper(*args, **kwargs):  try:   u = origin_func(*args, **kwargs)   return u  except Exception:   return 'an Exception raised.' return wrapperclass Test(object): def __init__(self):  pass def revive(self):  print('revive from exception.')  # do something to restore @catch_exception def read_value(self):  print('here I will do something.')  # do something.

登录后复制

这种写法,确实可以捕获到origin_func()的异常,但是如果在发生异常的时候,需要调用类里面的另一个方法来处理异常,这又应该怎么办?答案是给wrapper增加一个参数:self.

代码变为如下形式:

def catch_exception(origin_func): def wrapper(self, *args, **kwargs):  try:   u = origin_func(self, *args, **kwargs)   return u  except Exception:   self.revive() #不用顾虑,直接调用原来的类的方法   return 'an Exception raised.' return wrapperclass Test(object): def __init__(self):  pass def revive(self):  print('revive from exception.')  # do something to restore @catch_exception def read_value(self):  print('here I will do something.')  # do something.

登录后复制

只需要修改装饰器定义的部分,使用装饰器的地方完全不需要做修改。

下图为正常运行时的运行结果:

基于Python 装饰器装饰类中的方法

下图为发生异常以后捕获并处理异常:

基于Python 装饰器装饰类中的方法

通过添加一个self参数,类外面的装饰器就可以直接使用类里面的各种方法,也可以直接使用类的属性。

相关推荐:

python装饰器-限制函数调用次数的方法(10s调用一次)

以上就是基于Python 装饰器装饰类中的方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2263505.html

(0)
上一篇 2025年2月27日 07:38:48
下一篇 2025年2月22日 19:51:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 使用python装饰器计算函数运行时间

    下面为大家分享一篇使用python装饰器计算函数运行时间的实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧 装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰…

    编程技术 2025年2月27日
    200
  • python实现随机调用一个浏览器打开网页

    下面为大家分享一篇python实现随机调用一个浏览器打开网页,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧 前两天总结了一下python爬虫 使用真实浏览器打开网页的两种方法总结 但那仅仅是总结一下而已,今天本文来实战演练一下 依…

    编程技术 2025年2月27日
    200
  • python爬虫 使用真实浏览器打开网页的两种方法总结

    下面为大家分享一篇python爬虫 使用真实浏览器打开网页的两种方法总结,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧 1.使用系统自带库 os 这种方法的优点是,任何浏览器都能够使用, 缺点不能自如的打开一个又一个的网页 imp…

    编程技术 2025年2月27日
    200
  • Python针对给定字符串求解所有子序列是否为回文序列的方法

    这篇文章主要介绍了python针对给定字符串求解所有子序列是否为回文序列的方法,涉及python针对字符串的遍历、判断、运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python针对给定字符串求解所有子序列是否为回文序列的方法。分享…

    2025年2月27日
    200
  • 将python代码和注释分离的方法_python

    下面为大家分享一篇将python代码和注释分离的方法,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧 python的注释方式和C语言、C++、java有所不同 python语言中,使用‘#’ 来进行注释,其次还有使用 三…

    编程技术 2025年2月27日
    200
  • Python基于百度AI的文字识别的示例

    本篇文章主要介绍了python基于百度ai的文字识别的示例,现在分享给大家,也给大家做个参考。一起过来看看吧 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张带有文字的图片,进行识别。 下载bai…

    2025年2月27日
    200
  • 浅谈python字符串

    python字符串是一种元素为字符的序列类型。因为序列类型是元素被顺序放置的一种数据结构,因此可以通过索引来获取某一个字符,或者指定索引范围来获取一组字符。 >>> ch=’abcde’>>> print…

    编程技术 2025年2月27日
    200
  • python获取文件路径、文件名、后缀名的实例

    下面为大家分享一篇python获取文件路径、文件名、后缀名的实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧 实例如下所示: #########start 获取文件路径、文件名、后缀名############def jwkj_g…

    编程技术 2025年2月27日
    200
  • Python实现自定义顺序、排列写入数据到Excel的方法

    这篇文章主要介绍了python实现自定义顺序、排列写入数据到excel的方法,涉及python针对excel文件的数据处理及读写相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现自定义顺序、排列写入数据到Excel的方法。分…

    编程技术 2025年2月27日
    200
  • Python 将pdf转成图片的方法

    下面为大家分享一篇python 将pdf转成图片的方法,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧 本篇文章记录如何使用python将pdf文件切分成一张一张图片,包括环境配置、版本兼容问题。 环境配置(mac) 安装Image…

    2025年2月27日
    200

发表回复

登录后才能评论