Python基本的裝飾器用法詳解之二

實現基本的裝飾器

(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))

效果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章