装饰器★★★★★★

本文详细介绍了Python装饰器的使用,包括基本用法、@符号的含义、装饰器的嵌套以及如何通过扩展函数和类为原函数和类添加新功能,特别是如何处理带参数的函数和类成员。重点讨论了如何利用闭包保持状态,并通过装饰器实现方法到属性的转换。
摘要由CSDN通过智能技术生成

### 装饰器(运用了闭包函数)

"""
装饰器: 为原函数扩展新功能,用新功能去替代旧功能
作用  : 在不改变原有代码的基础上,实现功能上的扩展
符号  : @(语法糖)

"""

1.装饰器的基本用法

def kuozhan(func):
	def newfunc():
		print("厕所前,蓬头垢面")
		func()
		print("厕所后,精神气爽")
	return newfunc

def func():
	print("我叫高富帅")

func = kuozhan(func) # func = newfunc  <=>   func() = newfunc()
func()

2.@符号的使用

"""
@符号作用: 
	(1) 可以自动把@符号下面的函数当成参数传递给装饰器
	(2) 把新函数进行返回,让新函数去替换旧函数,以实现功能的扩展.		
"""
def kuozhan(func):
	def newfunc():
		print("厕所前,蓬头垢面")
		func()
		print("厕所后,精神气爽")
	return newfunc

@kuozhan
def func():
	print("我叫高富帅")

func()  # func = newfunc  <=>   func() = newfunc()

3.装饰器的嵌套

从下到上依次传递
在这里插入图片描述

def kuozhan1(func):
	def newfunc():
		print("厕所前,人模狗样1")
		func()
		print("厕所后,牛头马面2")
	return newfunc

def kuozhan2(func):
	def newfunc():
		print("厕所前,洗洗手3")
		func()
		print("厕所后,簌簌口4")
	return newfunc

@kuozhan2
@kuozhan1
def func():
	print("我是白富美5")

func()

4.用扩展函数添加带有参数的原函数的新功能

"""扩展里面的新功能函数和原函数在参数和函数调用处的参数上,要保持一致性."""
def kuozhan(func):
	def newfunc(who,where):
		print("厕所前,萎靡不振")
		func(who,where)
		print("厕所后,兽性大发")
	return newfunc

@kuozhan
def func(who,where):
	print("{who}在{where}解手".format(who=who,where=where))

func(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值