Any AOP support library for Python?
我正试图在我的Python编程中使用一些AOP,但我对现有的各种库没有任何经验。
所以我的问题是:
What AOP support exists for Python? And what are the advantages of the differents libraries between them?
号编辑
我发现了一些,但我不知道它们是如何比较的:
- 异步CT
- 针对python的轻量级AOP
编辑2
在哪种情况下我将使用这些?
我有两个用python编写的应用程序,它们通常有计算税收和其他货币的方法。我希望能够编写一个功能的"框架",并在运行时对其进行自定义,例如更改应用地方税的方式(按国家、州或城市等),而不必使整个堆栈过载。
请参阅s.lott关于python decorators的链接以获得一些很好的示例,并参阅decorators的定义PEP。
Python从一开始就有AOP,只是没有一个令人印象深刻的名字。在python 2.4中添加了decorator语法,这使得在语法上应用decorator非常好。
如果您希望根据规则应用装饰器,可能需要一个库,但是如果您愿意在声明相关函数/方法时标记它们,则可能不需要。
下面是一个简单缓存装饰器的示例(我为这个问题编写了它):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import pickle, functools def cache(f): _cache = {} def wrapper(*args, **kwargs): key = pickle.dumps((args, kwargs)) if key not in _cache: _cache[key] = f(*args, **kwargs) # call the wrapped function, save in cache return _cache[key] # read value from cache functools.update_wrapper(wrapper, f) # update wrapper's metadata return wrapper import time @cache def foo(n): time.sleep(2) return n*2 foo(10) # first call with parameter 10, sleeps foo(10) # returns immediately |
编辑:我不再维护副本,它已经被取消维护多年了。你可以考虑用另一个答案或者维基百科上的这个列表来代替。
另一个针对python的AOP库是
其特点是:
- 生成可重用的方面类
- 对实例或类应用多个方面
- 不应用于实例/类的方面
- 使用方面向实例添加新属性
- 将建议应用于实例/类的所有属性
- …
它还具有其他优点,例如一些特殊的描述符(参见文档)
在Python中,面向方面的编程通常包括在运行时动态修改类和实例,这通常被称为MonkeyPatching。在另一个AOP问题的答案中,我总结了在Python中AOP的一些用例。
使用注释并不是真正的AOP,因为编织过程有点硬编码。
在python中有几个AOP框架(我计算并比较了其中的8个,其中
我将发表一篇关于下一个会议的研究结果的论文,包括一个真实的行业用例。
BSD许可的python aspectlib怎么样?
Implementation status
Weaving functions, methods, instances and classes is completed.
号
我将从python decorator库开始。大部分都是AOP类型的东西。