欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python如何解除一個(gè)裝飾器

 更新時(shí)間:2020年08月07日 11:24:52   作者:David Beazley  
這篇文章主要介紹了Python如何解除一個(gè)裝飾器,幫助大家更好的理解和學(xué)習(xí)Python裝飾器,感興趣的朋友可以了解下

問題

一個(gè)裝飾器已經(jīng)作用在一個(gè)函數(shù)上,你想撤銷它,直接訪問原始的未包裝的那個(gè)函數(shù)。

解決方案

假設(shè)裝飾器是通過 @wraps 來實(shí)現(xiàn)的,那么你可以通過訪問 __wrapped__ 屬性來訪問原始函數(shù):

>>> @somedecorator
>>> def add(x, y):
...   return x + y
...
>>> orig_add = add.__wrapped__
>>> orig_add(3, 4)
7
>>>

討論

直接訪問未包裝的原始函數(shù)在調(diào)試、內(nèi)省和其他函數(shù)操作時(shí)是很有用的。 但是我們這里的方案僅僅適用于在包裝器中正確使用了 @wraps 或者直接設(shè)置了 __wrapped__ 屬性的情況。

如果有多個(gè)包裝器,那么訪問 __wrapped__ 屬性的行為是不可預(yù)知的,應(yīng)該避免這樣做。 在Python3.3中,它會(huì)略過所有的包裝層,比如,假如你有如下的代碼:

from functools import wraps

def decorator1(func):
  @wraps(func)
  def wrapper(*args, **kwargs):
    print('Decorator 1')
    return func(*args, **kwargs)
  return wrapper

def decorator2(func):
  @wraps(func)
  def wrapper(*args, **kwargs):
    print('Decorator 2')
    return func(*args, **kwargs)
  return wrapper

@decorator1
@decorator2
def add(x, y):
  return x + y

下面我們在Python3.3下測試:

>>> add(2, 3)
Decorator 1
Decorator 2
5
>>> add.__wrapped__(2, 3)
5
>>>

下面我們在Python3.4下測試:

>>> add(2, 3)
Decorator 1
Decorator 2
5
>>> add.__wrapped__(2, 3)
Decorator 2
5
>>>

最后要說的是,并不是所有的裝飾器都使用了 @wraps ,因此這里的方案并不全部適用。 特別的,內(nèi)置的裝飾器 @staticmethod @classmethod 就沒有遵循這個(gè)約定 (它們把原始函數(shù)存儲(chǔ)在屬性 __func__ 中)。

以上就是Python如何解除一個(gè)裝飾器的詳細(xì)內(nèi)容,更多關(guān)于Python 解除裝飾器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python運(yùn)用于數(shù)據(jù)分析的簡單教程

    Python運(yùn)用于數(shù)據(jù)分析的簡單教程

    這篇文章主要介紹了Python運(yùn)用于數(shù)據(jù)分析的簡單教程,主要介紹了如何運(yùn)用Python來進(jìn)行數(shù)據(jù)導(dǎo)入、變化、統(tǒng)計(jì)和假設(shè)檢驗(yàn)等基本的數(shù)據(jù)分析,需要的朋友可以參考下
    2015-03-03
  • 淺析Python 多行匹配模式

    淺析Python 多行匹配模式

    這篇文章主要介紹了Python 多行匹配模式的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 關(guān)于pyqt5控件自適應(yīng)窗口超詳細(xì)知識點(diǎn)匯總

    關(guān)于pyqt5控件自適應(yīng)窗口超詳細(xì)知識點(diǎn)匯總

    這篇文章主要介紹了關(guān)于pyqt5控件自適應(yīng)窗口超詳細(xì)知識點(diǎn)匯總,有了布局,再在布局中放置各種控件,我們就能讓控件實(shí)現(xiàn)自適應(yīng)的效果,需要的朋友可以參考下
    2023-03-03
  • Matplotlib繪圖基礎(chǔ)之刻度詳解

    Matplotlib繪圖基礎(chǔ)之刻度詳解

    Matplotlib中刻度是用于在繪圖中表示數(shù)據(jù)大小的工具,通常以整數(shù)或小數(shù)表示,具體取決于坐標(biāo)軸的類型和限制,下面就為大家介紹一下Matplotlib中刻度是具體設(shè)置與使用吧
    2023-07-07
  • conda創(chuàng)建環(huán)境過程出現(xiàn)"Solving?environment:?failed"報(bào)錯(cuò)的詳細(xì)解決方法

    conda創(chuàng)建環(huán)境過程出現(xiàn)"Solving?environment:?failed"報(bào)錯(cuò)的詳細(xì)解

    很長一段時(shí)間沒用conda了,然后突然使用conda創(chuàng)建環(huán)境報(bào)錯(cuò),所以下面這篇文章主要給大家介紹了關(guān)于conda創(chuàng)建環(huán)境過程出現(xiàn)"Solving?environment:?failed"報(bào)錯(cuò)的詳細(xì)解決方法,需要的朋友可以參考下
    2022-11-11
  • Flask的url_for和request.url如何進(jìn)行URL判斷

    Flask的url_for和request.url如何進(jìn)行URL判斷

    這篇文章主要介紹了Flask的url_for和request.url如何進(jìn)行URL判斷問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 基于Python繪制鍵盤按鍵使用次數(shù)的熱力圖

    基于Python繪制鍵盤按鍵使用次數(shù)的熱力圖

    這篇文章主要為大家詳細(xì)介紹了如何使用Python繪制鍵盤按鍵使用次數(shù)的熱力圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 在PyCharm中使用FMEObjects的操作步驟

    在PyCharm中使用FMEObjects的操作步驟

    這篇文章主要介紹了在PyCharm中使用FMEObjects,本文將ArcGISPro2.8的Python3.7解釋器與FME2022.0配合使用,通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例

    pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例

    在使用Pandas進(jìn)行數(shù)據(jù)處理時(shí),有時(shí)候我們可能會(huì)需要對數(shù)據(jù)進(jìn)行重置索引的操作,本文主要介紹了pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Python如何將將模塊分割成多個(gè)文件

    Python如何將將模塊分割成多個(gè)文件

    這篇文章主要介紹了Python如何將將模塊分割成多個(gè)文件,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08

最新評論