1. 程式人生 > >Python 修飾類的裝飾器

Python 修飾類的裝飾器

本文是我在學習時的篇筆記,示例程式碼可能岑在直接引用學習資料的情況。
在看了解Python類裝飾器之前可以先了解一下Python函式裝飾器

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
    之前的例子中裝飾器接收一個函式,並返回一個函式,從而起到加工函式的效果。
在Python 2.6以後,裝飾器被拓展到類。一個裝飾器可以接收一個類,並返回一個類,
從而起到加工類的效果。
'''
def decorator(aClass):  ##接收一個類
  class newClass:
    def __init__(self, age):
self.total_display = 0 self.wrapped = aClass(age) ### 在這裡重新例項化了被修飾類的物件 def display(self): ## 必須與被修飾類的方法名對應。 self.total_display += 1 print("total display", self.total_display) self.wrapped.display() ### 在這裡實際呼叫display方法。 def addAge(self,years = 1
)
:
self.wrapped.addAge(years) ### 這裡只是重寫的一下,並沒有進行修飾 return newClass ## 返回一個類 @decorator class Bird: def __init__(self, age): self.age = age def display(self): print("My age is", self.age) def addAge(self,years = 1): self.age = self.age + years if __name__ == "__main__"
: eagleLord = Bird(5) for i in range(3): eagleLord.addAge() eagleLord.display() ''' @decorator 當沒有裝飾器裝飾的時候,主函式部分功能如下: 1.例項化Bird類,並將age成員的初值設定為5 2.迴圈3次,分別依次呼叫addAge和display方法。 輸出如下: ('My age is', 6) ('My age is', 7) ('My age is', 8) ''' ''' 當被修飾後,display方法被修飾,增加total_display的計數和列印計數, addAge方法只是在修飾器中被重新呼叫了一下。輸出如下: ('total display', 1) ('My age is', 6) ('total display', 2) ('My age is', 7) ('total display', 3) ('My age is', 8) '''

相關推薦

python利用裝飾定義打補丁

我們希望檢查或者改寫一部分類的定義,以此來修改類的行為,但是不想通過繼承或者元類的方式來做。     如果希望解決這個問題,那麼類裝飾器絕對是首選。     下面這個示例演示瞭如何使用類裝飾器來重寫__getattribute__特殊方法,併為它增加了日誌功

Python——編寫裝飾

編寫類裝飾器類裝飾器類似於函式裝飾器的概念,但它應用於類,它們可以用於管理類自身,或者用來攔截例項建立呼叫以管理例項。 -----------------------------------------------------------------------------

Python 修飾裝飾

本文是我在學習時的篇筆記,示例程式碼可能岑在直接引用學習資料的情況。 在看了解Python類裝飾器之前可以先了解一下Python函式裝飾器 #!/usr/bin/env python # -*-

python小知識-__call__和裝飾的結合使用

python get 都沒有 IV ini ble 自定義 裝飾器 介紹 class Decorator(): def __init__(self, f): print(‘run in init......‘) self.f = f

Python 裝飾

1. import time, datetime class Ly: def __init__(self, fun): self.fun = fun print('this is the first step on ' + str(datetime

Python學習,裝飾,元

# 函式也是物件,可以把函式賦值給變數,使用變數呼叫函式 def func(x): return x+1 plus_one = func print(plus_one(1)) #%% # 裝飾器的思想是裝飾函式的物件,使函式在自身程式碼不變的情況下,增加一些普適的功能 imp

python裝飾2:裝飾

裝飾器1:函式裝飾器 裝飾器2:類裝飾器 裝飾器3:進階 本文是裝飾器相關內容的第二篇,關於類裝飾器。 "類裝飾器"有兩種解讀方式:用來裝飾類的裝飾器;類作為裝飾器裝飾其它東西。你如何認為取決於你,兩種說法都有出現在其它的文章中。我的文章中是將"類裝飾器"解讀為第一種方式,即裝飾類的東西

python裝飾的使用和裝飾中方法的使用

前面一遍講述了裝飾器的基本知識,正好最近有個系統需要進行許可權控制,那麼我們就例項分析下裝飾器的使用。裝飾器是一個面向切面程式設計,主要作用就是許可權控制,插入日誌,效能測試,事務處理,快取等。對於重要的系統我們僅僅控制登入是不夠的,對於固定人員使用到的系統我們還是要進行許

python裝飾以及描述作為裝飾

1. 類裝飾器 常見的裝飾器一般以函式(方法)的方式實現,根據裝飾器的原理,原函式或方法被裝飾後能得到一個新的可呼叫物件,那麼其實類也能實現這個功能,只要這個類(例項)是可呼叫的,即實現了__call__方法。 # demo class Decorator:

python 描述符 上下文管理協議 裝飾 property metaclass

get stat www. 類方法 aaa 部分 函數裝飾器 delete elf 1.描述符 #!/usr/bin/python env # coding=utf-8 # 數據描述符__get__ __set__ __delete__ ‘‘‘ 描述符總結

python unittest框架裝飾

import pytho 一次 chrom code element case .com lee 要說單元測試和UI自動化之間的是什麽樣的一個關系,說說我個人的一些心得體會吧,我並沒有太多的這方面經驗,由於工作本身就用的少,還有就是功能測試點點對於我這種比較懶惰的人來說,比

Python之路-裝飾

style 執行 其他 臨時 image 而不是 globals 定義 裝飾 一.裝飾器前置知識要點 1.名稱空間 存放名字與變量綁定關系的地方 名稱空間的分類: 內置名稱空間:Python解釋器啟動時,存

Python學習之裝飾進階

放大 python學習 else pen 裝飾 dap style pri aaa 函數知識回顧: 函數的參數分為:實參和形參。 實參:調用函數的時候傳入的參數; 形參:分為3種(位置參數、默認參數、動態傳參) 位置參數:必須傳值 def aaa(a,b): pr

Python + selenium + unittest裝飾 @classmethod

add log 前言 Coding elf get 方式 assm cme 前言 前面講到unittest裏面setUp可以在每次執行用例前執行,這樣有效的減少了代碼量,但是有個弊端,比如打開瀏覽器操作,每次執行用例時候都會重新打開,這樣就會浪費很多時間。 於是就想是不是可

Selenium2+python-unittest之裝飾(@classmethod)

selenium self selenium2 def tex 驗證 drive sts ttr 原文地址:http://www.cnblogs.com/yoyoketang/p/6685416.html 前言 前面講到unittest裏面setUp可以在每次執行用例前執行

python基礎學習裝飾

原則 裝飾 es2017 使用方法 cnblogs 修改 alt nbsp img 裝飾器使用裝飾器可以在不改動原有函數和調用方式時給函數附加功能裝飾器是由高階函數+嵌套函數+高階函數組成的裝飾器原則:1.不修改被裝飾對象的源代碼2.不修改被裝飾對象的調用方式 調用方式:

python函數裝飾的使用

return == oba 閉包 影響 lob wrap 一次 global # -*- coding: utf-8 -*- ‘‘‘ 使用語法糖@來裝飾函數,相當於“myfunc = deco(myfunc)” 但發現deco函數只在第一次被調用,且myfunc函數在第

python基礎:裝飾

裝飾器一、定義: 是一個傳入值是函數,返回值也是函數的高階函數。二、作用: 不改變原函數的代碼和調用方式,增加新的功能。三、實例: 把兩個函數earth()和moon()添加print(‘They are in the solar system!‘)

Python基礎05 - 裝飾

重復 += home 函數式編程 問題 user col rap 重用 @@@文章內容參照老男孩教育  Alex金角大王,武Sir銀角大王@@@ 函數即對象   在python中,函數和我們之前的[1,2,3],‘abc‘,8 等一樣都是對象,而且函數是最高級的對象(對象是

python functools.wraps裝飾模塊

aps imp 計時 def 進行 Coding 被調用 這一 import 1 # -*-coding=utf-8 -*- 2 #實現一個函數執行後計算執行時間的功能 3 4 __author__ = ‘piay‘ 5 import time, f