python裝飾器的4種類型:函數裝飾函數、函數裝飾類、類裝飾函數、類裝飾類


摘自:https://blog.csdn.net/gezailushang/article/details/84291092 

https://blog.csdn.net/xiemanr/article/details/72510885

 

一:函數裝飾函數


     
     
     
             
  1. def wrapFun(func):
  2. def inner(a, b):
  3. print( 'function name:', func.__name__)
  4. r = func(a, b)
  5. return r
  6. return inner
  7. @wrapFun
  8. def myadd(a, b):
  9. return a + b
  10. print(myadd( 2, 3))

二:函數裝飾類


     
     
     
             
  1. def wrapClass(cls):
  2. def inner(a):
  3. print( 'class name:', cls.__name_ _)
  4. return cls(a)
  5. return inner
  6. @wrapClass
  7. class Foo():
  8. def __init__(self, a):
  9. self.a = a
  10. def fun(self):
  11. print( 'self.a =', self.a)
  12. m = Foo( 'xiemanR')
  13. m.fun()

三:類裝飾函數


     
     
     
             
  1. class ShowFunName():
  2. def __init__(self, func):
  3. self._func = func
  4. def __call__(self, a):
  5. print( 'function name:', self._func.__name_ _)
  6. return self._func(a)
  7. @ShowFunName
  8. def Bar(a):
  9. return a
  10. print(Bar( 'xiemanR'))

四:類裝飾類


     
     
     
             
  1. class ShowClassName(object):
  2. def __init__(self, cls):
  3. self._cls = cls
  4. def __call__(self, a):
  5. print( 'class name:', self._cls.__name_ _)
  6. return self._cls(a)
  7. @ShowClassName
  8. class Foobar(object):
  9. def __init__(self, a):
  10. self.value = a
  11. def fun(self):
  12. print( self.value)
  13. a = Foobar( 'xiemanR')
  14. a.fun()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM