我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python实现自己的AOP

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python实现自己的AOP

Java中的AOP可以用JDK的动态代理和cglib来实现,将需要拦截的方法前后可以额外添加些功能。

Python中有许多方法去实现AOP,现在先介绍第一种比较简单的:

1)利用with...as...

Python的with...as...子句是用于控制执行流程的语句,结构是with expression as variable,这里的expression里定义拦截的方法前后需要执行的逻辑,分别定义“__enter__”和“__exit__”方法,“__enter__”方法定义拦截方法执行前的逻辑,“__exit__”方法定义拦截方法执行后的逻辑,with...as...子句的主体是拦截的方法执行的逻辑,variable变量是用来接收“__enter__”方法返回的值,下面来看个示例:

class AOP: 
     def __enter__(self): 
          print("before action enter") 
          return 1 
 
     def __exit__(self, *args):
          print("after action enter")
          return 0
 
def Myfunction(): 
     print ('Myfunction() called and processed ')
     return 111 

def Myfunction1(): 
     print ('Myfunction1()  called and processed')
     return 222


def MyMain():
           with AOP() as AOPValue:
                      print ('AOPValue is %s'%AOPValue)
                      Myfunction()
                      Myfunction1()
          
if __name__ == '__main__':
           MyMain()

 
最后输出的结果是:

before action enter
AOPValue is 1
Myfunction() called and processed
Myfunction1()  called and processed
after action enter

PS:with子句中的variable接收的是__enter__方法的返回值。这是with子句的基本用法

2)利用contextlib实现AOP

Python核心库中的contextlib中的contextmanager来实现AOP就非常简单了,contextmanager是一个装饰器,具体用法如下示例:

from contextlib import contextmanager 

#define inteceptors

@contextmanager 
def AOPfunc(name): 
    print ("before:some actions done") 
    yield 
    print ("after:some actions done ") 

#normal service flow 
def BusinessProcess1(): 
     print ('BusinessProcess1()')
     return 111 

def BusinessProcess2(): 
     print ('BusinessProcess2()')
     return 111

def BusinessProcess3(): 
     print ('BusinessProcess3()')
     return 111

#main flow
def MyMain():
           with AOPfunc("aop"):
                      BusinessProcess1()
                      BusinessProcess2()
                     
           with AOPfunc("aop"):
                       BusinessProcess3()


if __name__ == '__main__':
           MyMain()

 
运行结果是:
 
before:some actions done
BusinessProcess1()
BusinessProcess2()
after:some actions done
before:some actions done
BusinessProcess3()
after:some actions done
 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python实现自己的AOP

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python实现自己的AOP

Java中的AOP可以用JDK的动态代理和cglib来实现,将需要拦截的方法前后可以额外添加些功能。Python中有许多方法去实现AOP,现在先介绍第一种比较简单的:1)利用with...as...Python的with...as...子句
2023-01-31

Android 实现自己的LOG信息

在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用。在这一篇文章中,我们简单介绍在
2022-06-06

Maven实现自己的starter依赖

本文主要介绍了Maven实现自己的starter依赖,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-15

Python搭建自己IP代理池的方法实现

本文主要介绍了Python搭建自己IP代理池的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-13

Python实现发送邮件到自己邮箱

在日常开发中,我们经常需要监控应用程序的状态,及时发现问题并采取措施解决。而通过邮件发送报警信息则是一种常见的实现方式。本文就来介绍一下Python实现发送邮件到自己邮箱的方法
2023-05-14

自己实现的android树控件treeview

1.开发原因在项目中经常需要一个需要一个树状框架,这是非常常见的控件。不过可能是谷歌考虑到android是手机系统,界面宽度有限,所以只提供了只有二级的ExpandableListView。虽然这个控件可以满足很多需求,但是无数级的树在某些
2022-06-06

python 限制函数执行时间,自己实现

# coding=utf-8import signalimport timedef set_timeout(num, callback): def wrap(func): def handle(signum, frame
2023-01-31

Redis+AOP+自定义注解实现限流

目录Redis安装下载解压准备编译编译测试编译安装配置运行检查端口是否在使用中查看redis的当前版本:使redis可以用systemd方式启动和管理查看本地centos的版本:客户端连接redisRedis限流1、引入依赖2、applic
2022-06-28

Spring AOP中如何实现自动代理

小编给大家分享一下Spring AOP中如何实现自动代理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!这里的自动代理,我讲的是自动代理bean对象,其实就是在xm
2023-05-30

python 创建自己的包

创建步骤:创建一个文件夹:mymath,在该文件夹下创建三个python 文件,分别为:__init__.py   getMax.py     getMin.py__init__.py:   这个文件必须以__init__命名,包管理器会自
2023-01-31

SpringBoot搭配AOP实现自定义注解

这篇文章主要为大家详细介绍了SpringBoot如何搭配AOP实现自定义注解,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2022-12-09

详解Java注解实现自己的ORM

这篇文章主要介绍了Java注解实现自己的ORM知识,本文通过示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
2022-11-13

Maven怎么实现自己的starter依赖

本篇内容主要讲解“Maven怎么实现自己的starter依赖”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Maven怎么实现自己的starter依赖”吧!1. 准备工作1.1 创建一个项目打开i
2023-07-06

Golang实现自己的Redis(TCP篇)实例探究

目录引言EasyRedis之TCP服务日志库实现conf配置文件解析TCP服务实现创建tcp服务对象启动tcp服务处理连接请求关闭服务引言用11篇文章实现一个可用的Redis服务,姑且叫EasyRedis吧,希望通过文章将Redis掰开撕
Golang实现自己的Redis(TCP篇)实例探究
2024-01-29

Python 编写自己的异常

所有的异常都是在Python或者它的标准库中提前定义好的。根据自己的目的可以使用任意的异常类型,同时也可以自己定义异常类型,用来处理程序中可能会出现的特殊情况。        一个异常是一个类,即类Exception的一个子类。#编写异常U
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录