30

可能重复:
Python 的任何 AOP 支持库?

我熟悉AspectJJava 语言的扩展。

我想知道Python是否有这样的东西。

不要误会我的意思,我不是指库,而是像AspectJJava 这样的语言扩展。

4

2 回答 2

38

Python 不需要诸如“语言扩展”之类的东西就能够以面向方面的方式工作。

这仅仅是由于 Python 本身的动态机制。谷歌搜索会产生几个项目——但尽管看起来只是像库,但这就是 Python 所需要的。

这不是我编造的——事实上,您可以自省类和方法,并在运行时更改它们。当我第一次了解 Aspect Orientation 时,我可以在几个小时内用 Python 实现一些概念证明——当然,一些现有项目可以提供生产质量的条目。

但是既然你问了,有一种 Python “语言扩展”可以用于 Aspect Orientation:当我进行上面提到的概念证明时,我曾经在运行时检查方法的输入参数以确定是否某些方法是否会受到规则的影响。

在 Python 3 中,该语言有一个鲜为人知的特性,它允许注释函数或方法的输入参数和返回值。面向方面的库可以利用它在“加载时”应用它的魔力,而不是在每个函数调用时。

顺便说一句,这是我的快速破解,以获得使用纯 Python 的 Aspect Orientation 的工作示例。抱歉 - 代码注释在 pt_BR - https://bitbucket.org/jsbueno/metapython/src/f48d6bd388fd/aspect.py

于 2012-09-10T17:41:26.397 回答
5

您可以使用Spring Python

链接:http ://docs.spring.io/spring-python/1.2.x/sphinx/html/aop.html#aspect-orientated-programming

于 2012-09-10T17:38:43.297 回答