python接口自动化学习四之装饰器

  • 函数可以当作一个变量
  • 函数的参数也可以是函数
  • 函数是可以嵌套的
def f():
	print("hello")
per=f()
per

def f2(a):
	return a
f2(f())

def f3():
	def f4():
		return ('hello f4')
	return f4()

f3()
  • 封闭:对已实现的功能代码尽可能的不要做修改。
  • 开放:对现有的功能代码可扩展
  • 需求:在调用f1 or f2函数的时候,先打印python自动化测试实战,再打印其他。
def getInfo(func):
	def inner():
		print('python自动化测试实战')
		func()
	return inner

@getInfo
def f1():
	print('网易云课堂')

@getInfo
def f2():
	print('51CTO的平台')

f1()
1,执行getinfo函数的时候,把被装饰的函数f1当作参数来传递
2,getinfo函数的返回值会重新赋值
3,一旦结合了装饰器后,调用f1的函数其实执行的是inner函数的内部,原来的函数f1被覆盖
4,被装饰的函数f1重新赋值给装饰器的内层函数Inner
def login1(func):
	def inner(token='123456'):
		if token=='123456':
			return func(token)
		else:
			return '请登陆系统'
	return inner

@login1
def profile1(token):
	return '你的主页信息'

print(profile1('123456'))

在函数中添加装饰器

def logit(logfile='out.log'):
	def logging_decorator(func):
		#@wraps(func)
		def wrapped_function(*args,**kwargs):
			log_string=func.__name__+' was called'
			print(log_string)
			with open(logfile,'a') as opened_file:
				opened_file.write(log_string+'\n')
			return func(*args,**kwargs)
		return wrapped_function
	return logging_decorator

@logit()
def myfunc1(a):
	pass

myfunc1('a')

@logit(logfile='func2.log')
def myfunc2():
	pass

myfunc2()
#装饰器类

from functools import wraps

class logit(object):
	def __init__(self,logfile='out.log'):
		self.logfile=logfile
	def __call__(self, func):
		@wraps(func)
		def wrapped_function(*args,**kwargs):
			log_string=func.__name__+' was called'
			print(log_string)
			with open(self.logfile,'a') as opened_file:
				opened_file.write(log_string+'\n')
			self.notify()
			return func(*args,**kwargs)
		return wrapped_function
	def notify(self):
		pass

@logit()
def myfunc1():
	pass

myfunc1()

#给logit创建子类,来添加email的功能
class email_logit(logit):
	def __init__(self,email='admin@myproject.com',*args,**kwargs):
		self.email=email
		super(email_logit,self).__init__(*args,**kwargs)
	def notify(self):
		pass

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值