程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python | 屬性包裝器

編輯:Python

1. 普通方法

1.1. 裝飾器無參數

def warp(callback):
def f(*args, **kwargs):
print('調用之前')
callback(*args, **kwargs)
print('調用之後')
return f
@warp
def hello(name: str = '未設置'):
print(f'hello {
name}')
if __name__ == '__main__':
hello('yimt')

Output

調用之前
hello yimt
調用之後

1.2. 裝飾器有參數

def warp(name: str):
def f1(callback):
def f2(*args, **kwargs):
kwargs['name'] = name
print('調用之前')
callback(*args, **kwargs)
print('調用之後')
return f2
return f1
@warp('yimt')
def hello(name: str = '未設置'):
print(f'hello {
name}')
if __name__ == '__main__':
hello()

Output

調用之前
hello yimt
調用之後

2. 類方法

2.1. 裝飾器不帶參數

def wrap(callback):
def f(*args, **kwargs):
print('調用之前')
r = callback(*args, **kwargs)
print('調用之後')
return r
return f
class A:
@wrap
def hello(self, name: str = '未設置'):
print(f'hello {
name}')
a = A()
a.hello('yimt')

Output

調用之前
hello yimt
調用之後

2.2. 裝飾器帶參數

def wrap(name: str):
def f1(callback):
def f2(*args, **kwargs):
kwargs['name'] = name
print('調用之前')
r = callback(*args, **kwargs)
print('調用之後')
return r
return f2
return f1
class A:
@wrap('yimt')
def hello(self, name: str = '未設置'):
print(f'hello {
name}')
a = A()
a.hello()

Output

調用之前
hello yimt
調用之後

3. 多裝飾器

def warp_a(callback):
def f(*args, **kwargs):
print('a調用之前')
callback(*args, **kwargs)
print('a調用之後')
return f
def warp_b(callback):
def f(*args, **kwargs):
print('b調用之前')
callback(*args, **kwargs)
print('b調用之後')
return f
@warp_a
@warp_b
def hello(name: str = '未設置'):
print(f'hello {
name}')
if __name__ == '__main__':
hello('yimt')

Output

a調用之前
b調用之前
hello yimt
b調用之後
a調用之後

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved