以下為大家分享一篇基於Python 裝飾器裝飾類別中的方法實例,具有很好的參考價值,希望對大家有幫助。一起來看看吧
title: Python 裝飾器裝飾類別中的方法
comments: true
date: 2017-04-17 20:44: 31
tags: ['Python', 'Decorate']
category: ['Python']
---
目前在中文網上能搜尋到的絕大部分關於裝飾器的教程,都在講如何裝飾一個普通的函數。本文介紹如何使用Python的裝飾器裝飾一個類別的方法,同時在裝飾器函數中呼叫類別裡面的其他方法。本文以捕捉一個方法的異常為例來進行說明。
有一個類別Test, 它的結構如下:
#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 wrapper class 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 wrapper class 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裝飾器-限制函數呼叫次數的方法(10s呼叫一次)
以上是基於Python 裝飾器裝飾類別中的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3漢化版
中文版,非常好用