Python入门-面向对象-装饰器
2021/8/20 17:35:43
本文主要是介绍Python入门-面向对象-装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 方法四:定义一个装饰器接收操作函数,是由python传递 def log_logging(func): def wrapper(*args, **kwargs): #获取包装函数的名称 print("方法四:这是装饰器的日志方法,当前函数为:{}".format(func.__name__)) return func(*args, **kwargs) return wrapper # 返回装饰器函数,就是闭包 class Message: @log_logging def print_title(self): print("方法一:这是print方法直接输出的日志") logging() log() #方法二:定义一个日志函数 def logging(): print("方法二:这是使用logging函数,输出的日志!!") #方法三:使用inspet模块方法,获取方法名称 def log(): import inspect res = inspect.stack()[1][3] print("方法三:这是使用inspect模块,输出的日志!当前方法为:{}".format(res)) if __name__ == '__main__': m = Message() m.print_title()
完整的日志装饰器
def log_logging(level="info"): def wrapper(func): def inner(*args, **kwargs): #获取包装函数的名称 print("【logging-{}】的日志,当前函数为:{}".format(level,func.__name__)) return func(*args, **kwargs) return inner # 返回装饰器函数,就是闭包 return wrapper class Message: @log_logging(level="DEBUG") # 设置参数 def print_title(self): print("正在使用print——title方法!") if __name__ == '__main__': m = Message() m.print_title()
基于类定义实现的装饰器
# 使用call方法 class logging: def __init__(self, level = "INFO"): self.__level = level def __call__(self, func): def inner(*args, **kwargs): # 获取包装函数的名称 print("【logging-{}】的日志,当前函数为:{}".format(self.__level, func.__name__)) return func(*args, **kwargs) return inner # 返回装饰器函数,就是闭包 class Message: @logging(level="DEBUG") def print_info(self): print("正在使用print_info的方法。") if __name__ == '__main__': m = Message() m.print_info() """
【logging-DEBUG】的日志,当前函数为:print_info
正在使用print_info的方法。
"""
wrapt模块
#wrapt减少嵌套层数 #先安装:pip install wrapt import wrapt @wrapt.decorator() def logging(wrapped, insrance, args, kwargs): print("【方法一:logging】的日志,当前函数为:{}".format(wrapped.__name__)) def log_log(level="INFO"): @wrapt.decorator() def log_wrapper(wrapped, insrance, args, kwargs): print("【方法二:logging-{}】的日志,当前函数为:{}".format(level,wrapped.__name__)) return wrapped(*args, **kwargs) return log_wrapper class Message: # @logging #这是方法一,两个装饰器,不能同时使用 @log_log(level="DEBUG") #这是方法二 def print_info(self): print("正在使用print_info的方法") if __name__ == '__main__': m = Message() print(m.print_info())
【方法二:logging-DEBUG】的日志,当前函数为:print_info
正在使用print_info的方法
None
内置装饰器
这篇关于Python入门-面向对象-装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南