91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何實現裝飾器

發布時間:2021-08-03 12:29:13 來源:億速云 閱讀:100 作者:小新 欄目:開發技術

這篇文章主要介紹python如何實現裝飾器,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1. 普通裝飾器

 import logging
 
 1. foo = use_loggine(foo)
 def use_loggine(func):
 def wrapper():
  logging.warn("%s is running " % func.__name__)
  return func()
 return wrapper
 
 @use_loggine
 def foo():
 print "aaa"
 foo()
 print foo.__name__

2. func 需要參數:

foo = use_loggine(foo) 第一個參數就是func這個函數對象,不包含參數foo(params)

 def use_loggine(func):
 def wrapper(name):
  logging.warn("%s is running " % func.__name__)
  return func(name)
 return wrapper
 
 
 @use_loggine
 def foo(name):
 print "name is %s" % name

3. 裝飾器帶參數

 foo = use_logging('warn')(foo) 還是把被裝飾的函數當做參數賦給裝飾器

 def use_logging(level):
 def decorator(func):
 def wrapper(*args, **kwargs):
  if level == 'warn':
  logging.warn("%s is running" % func.__name__)
  elif level == 'info':
  logging.warn("%s is running" % func.__name__)
  return func(*args)
 return wrapper
 return decorator
 
 @use_logging('warn')
 def foo(name):
 print "i am %s" % name
 
 foo = use_logging('warn')(foo)
 print foo.__name__
 foo('foo')

4. 類裝飾器,還是把被裝飾的函數當做參數賦給裝飾器

 foo = Foo(params)(func)
 
 class Foo(object):
 def __init__(self, name):
 self.name = name
 
 def __call__(self, func):
 def aa():
  print "class decorator running"
  print "name is :%s" % self.name
  func()
  print 'class decorator ending'
 return aa

 @Foo("hello")
 def bar():
 print "world"
 
 bar()
 
 @deco
 def foo()
 pass
 
 foo = deco(foo)
 
 @deco(xx)
 def foo():
 pass
 
 foo = deco(xx)(foo)

5. 類方法裝飾器

類方法裝飾器和其他裝飾器沒有什么區別,只不過在裝飾器內部返回的函數中,第一個參數是固定的,是調用方法的對象本身,如

果是實例對象,就是self,是類方法的話,就是cls,靜態方法的話,沒有第一個參數。

 from functools import wraps

 
 def method_decor(func):
 @wraps(func)
 def wrapper(*args, **kwargs):
  try:
  u = func(*args, **kwargs)
  return u
  except Exception as e:
  args[0].bb() # args[0]就是self或者cls。可以在args前面定義self,更加方便u = func(self,*args, **kwargs)
  return 'an Exception raised.'
 
 return wrapper
 
 
 class Foo(object):
 
 @method_decor
 def aa(self):
  # print("This is wraped method")
  raise Exception('aa')
 
 def bb(self):
  print("This is called method")
 
 
 
 a = Foo()
 a.aa()

以上是“python如何實現裝飾器”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿勒泰市| 枣强县| 安吉县| 石屏县| 正宁县| 泽库县| 西昌市| 诸城市| 阿坝| 田阳县| 东海县| 江阴市| 孙吴县| 曲周县| 青川县| 泰兴市| 玛沁县| 梅河口市| 温泉县| 光泽县| 汶川县| 河北区| 桦甸市| 廉江市| 仲巴县| 苗栗县| 安平县| 左云县| 交城县| 蛟河市| 秀山| 台中县| 揭东县| 梁平县| 莱西市| 枣阳市| 虹口区| 和田县| 高邮市| 类乌齐县| 琼海市|