實現基本的裝飾器
(1)將類作爲參數
class With:
#綁定類的方法
def before():
print('我是With類before!')
def after():
print('我是With類after!')
def add(cls):
def decor(func):
def inner():
cls.before()
result = func()
cls.after()
return result
return inner
return decor
@add(With)
def lianxi():
print('我是函數lianxi!')
return '我是函數lianxi的返回值!'
ren = lianxi()
print(ren)
效果圖:
(2)將類作爲裝飾器使用
class deco():
def __init__(self, name):
self.name = name
def __call__(self, func):
print(self.name)
print('我是__call__方法!')
self.func = func
return self.inner
def inner(self, *arg, **kw):
self.func(*arg, **kw)
@deco('爲類添加參數name')
def show(a):
print(a)
show('我是函數show')
效果圖:
(3)爲類添加裝飾器(簡單的單例模式)
instance = None
def deco(cls):
def inner(*arg, **kw):
global instance
if instance == None:
instance = cls()
return instance
return inner
@deco # show = deco(show)
class Show():
print()
s1 = Show()
s2 = Show()
print(id(s1))
print(id(s2))
效果圖: