返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现自己的AOP
  • 931
分享到

Python实现自己的AOP

自己的PythonAOP 2023-01-31 02:01:52 931人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

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
 

--结束END--

本文标题: Python实现自己的AOP

本文链接: https://lsjlt.com/news/185442.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python实现自己的AOP
    Java中的AOP可以用JDK的动态代理和cglib来实现,将需要拦截的方法前后可以额外添加些功能。 Python中有许多方法去实现AOP,现在先介绍第一种比较简单的: 1)利用with...as... Python的with....
    99+
    2023-01-31
    自己的 Python AOP
  • Android 实现自己的LOG信息
           在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运...
    99+
    2022-06-06
    log Android
  • Maven实现自己的starter依赖
    目录1. 准备工作1.1 创建一个项目1.2 修改pom文件1.3 修改项目结构2. 动手实现2.1 创建客户端类2.2 创建配置类2.3 配置路径2.4 下载到本地仓库3. 测试1...
    99+
    2023-05-15
    Maven starter依赖 Maven starter
  • Python实现发送邮件到自己邮箱
    目录1、缘由2、设置SMTP服务器3、使用python发送4、总结5、补充1、缘由 在日常开发中,我们经常需要监控应用程序的状态,及时发现问题并采取措施解决。而通过邮件发送报警信息则...
    99+
    2023-05-14
    Python发送邮件到邮箱 Python发送邮件 Python 邮件 邮箱
  • Python搭建自己IP代理池的方法实现
    IP代理是什么: ip就是访问网页数据服务器位置信息,每一个主机或者网络都有一个自己IP信息 为什么要使用代理ip: 因为在向互联网发送请求中,网页端会识别客户端是真实用户还是爬虫程...
    99+
    2023-02-13
    Python搭建IP代理池 Python IP代理池
  • Spring AOP 实现自定义注解的示例
    目录1. 注解如下:2. 切面自工作后,除了一些小项目配置事务使用过 AOP,真正自己写 AOP 机会很少,另一方面在工作后还没有写过自定义注解,一直很好奇注解是怎么实现他想要的功能...
    99+
    2024-04-02
  • 自己实现的android树控件treeview
    1.开发原因在项目中经常需要一个需要一个树状框架,这是非常常见的控件。不过可能是谷歌考虑到android是手机系统,界面宽度有限,所以只提供了只有二级的ExpandableLi...
    99+
    2022-06-06
    treeview Android
  • Python教程自己实现软件加密功能
    目录原理加密操作:解密操作:生成随机密钥:加密单元:解密单元:加密文本文件解密文件基础知识 在 Python 中异或操作符为:^,也可以记作 XOR。按位异或的意思是:相同值异或为 ...
    99+
    2024-04-02
  • python 限制函数执行时间,自己实现
    # coding=utf-8 import signal import time def set_timeout(num, callback): def wrap(func): def handle(signu...
    99+
    2023-01-31
    执行时间 函数 python
  • python 创建自己的包
    创建步骤: 创建一个文件夹:mymath,在该文件夹下创建三个python 文件,分别为:__init__.py   getMax.py     getMin.py __init__.py:   这个文件必须以__init__命名,包管理...
    99+
    2023-01-31
    自己的 python
  • Redis+AOP+自定义注解实现限流
    目录Redis安装下载解压准备编译编译测试编译安装配置运行检查端口是否在使用中查看redis的当前版本:使redis可以用systemd方式启动和管理查看本地centos的版本:客户端连接redisRedis限流1、引入...
    99+
    2022-06-28
    Redis AOP 自定义注解 限流 Redis 限流
  • Spring AOP中如何实现自动代理
    小编给大家分享一下Spring AOP中如何实现自动代理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!这里的自动代理,我讲的是自动代理bean对象,其实就是在xm...
    99+
    2023-05-30
    spring aop
  • SpringBoot搭配AOP实现自定义注解
    目录1.springBoot的依赖2.自定义注解的步骤2.1定义注解类2.2定义切面2.3使用注解3.知识点补充3.1 关于Target注解补充3.2 关于Retention注解补充...
    99+
    2022-12-09
    SpringBoot AOP自定义注解 SpringBoot  自定义注解 SpringBoot AOP 注解
  • Python怎么实现发送邮件到自己邮箱
    1、缘由在日常开发中,我们经常需要监控应用程序的状态,及时发现问题并采取措施解决。而通过邮件发送报警信息则是一种常见的实现方式。2、设置SMTP服务器登录到QQ邮箱后台然后点击账户找到“POP3/SMTP服务”和“IMAP/SMTP服务”项...
    99+
    2023-05-14
    Python
  • 详解Java注解实现自己的ORM
    搞过Java的码农都知道,在J2EE开发中一个(确切地说,应该是一类)很重要的框架,那就是ORM(Object Relational Mapping,对象关系映射)。它把Java中的...
    99+
    2022-11-13
    Java注解ORM Java注解
  • Maven怎么实现自己的starter依赖
    本篇内容主要讲解“Maven怎么实现自己的starter依赖”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Maven怎么实现自己的starter依赖”吧!1. 准备工作1.1 创建一个项目打开i...
    99+
    2023-07-06
  • 自己编写IOC控制反转及AOP面向切面
    目录1.概念IOC:Inversion of control 控制反转AOP:Aspect oriented Programming 面向切面编程2.通过银行转账案例手写IOC和AO...
    99+
    2024-04-02
  • Golang实现自己的Redis(TCP篇)实例探究
    目录引言EasyRedis之TCP服务日志库实现conf配置文件解析TCP服务实现创建tcp服务对象启动tcp服务处理连接请求关闭服务引言 用11篇文章实现一个可用的Redis服务,姑且叫EasyRedis吧,希望通过文...
    99+
    2024-01-29
    Golang Redis TCP Golang Redis
  • python如何打出自己的名字,怎么用python写自己名字
    大家好,给大家分享一下python如何打出自己的名字,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!   可以使用Python编写一个简单的程序来输出姓名、学号、班级等信息,代码如下: print(...
    99+
    2023-10-24
    python
  • Python 编写自己的异常
            所有的异常都是在Python或者它的标准库中提前定义好的。根据自己的目的可以使用任意的异常类型,同时也可以自己定义异常类型,用来处理程序中可能会出现的特殊情况。        一个异常是一个类,即类Exception的一个子...
    99+
    2023-01-31
    自己的 异常 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作