当前位置:  开发笔记 > 编程语言 > 正文

Python的任何AOP支持库?

如何解决《Python的任何AOP支持库?》经验,为你挑选了3个好方法。

我试图在我的Python编程中使用一些AOP,但我没有任何存在的各种库的经验.

所以我的问题是:

Python存在哪些AOP支持?它们之间的不同库有什么优势?


编辑

我找到了一些,但我不知道他们如何比较:

Aspyct

适用于Python的轻量级AOP

编辑2

在哪种情况下我会使用这些?

我有两个用Python编写的应用程序,它们通常有计算税收和其他金钱的方法.我希望能够编写一个功能的"骨架",并在运行时自定义它,例如更改地方税的应用方式(按国家,州或城市等),而不必重载全栈.



1> orip..:

有关一些很好的示例,请参阅S.Lott关于Python装饰器的链接,并查看装饰器的定义PEP.

Python从一开始就有AOP,它没有一个令人印象深刻的名字.在Python 2.4中添加了装饰器语法,这使得应用装饰器在语法上非常好.

也许如果你想根据规则应用装饰器你需要一个库,但如果你愿意在声明它们时标记相关的函数/方法,你可能不会.

这是一个简单的缓存装饰器的例子(我为这个问题写了它):

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


我不相信装饰和AOP是一回事.恕我直言,使用AOP,您应该能够在不使用现有代码的情况下向现有代码添加新行为.
是的.我认为memoization是一个简单概念的奇特名称,可以使它更难理解.我对"AOP"这个词有类似的感受.
@rds在Python中,您只需修补现有代码而无需直接修改它.你不需要花哨的术语和技巧......

2> 小智..:

另一个用于python的AOP库将是pytilities.它是目前最强大的(据我所知).

它的特点是:

制作可重复使用的Aspect类

将多个方面应用于实例或类

实例/类的unapply方面

使用方面向实例添加新属性

将建议应用于实例/类的所有属性

...

它还有其他一些好东西,比如一些特殊的描述符(参见文档)



3> Eli Courtwri..:

在Python中,面向方面的编程通常包括在运行时动态修改类和实例,这通常称为monkeypatching.在回答另一个AOP问题时,我总结了Python中AOP的一些用例.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有