python2.7 装饰来自另一个外部模块中使用的外部模块的功能



我有 3 个文件a.pycb.pycc.py

文件a.pyc

def f(x):
# do something with x and get y
return y

文件b.pyc

from a import f
def g(x):
z = f(x)
# process z and get w
return w

我无法修改这些文件,但我可以c.py并且其中的代码将在b.pyc问题是我可以在文件c.py中添加装饰器(以及如何(到函数f以及何时调用函数fg装饰器中的代码将执行?

# a.py
class A:
def __init__(self):
pass
def f(self, x):
xx = x+100
print xx
return xx
# b.py
from a import A

class B:
def __init__(self):
self.a = A()
def g(self):
x = self.a.f(3) + 1000
print x
return x
# c.py
from functools import wraps
from a import A

def run_before(module, func_name):
def decorator(callback):
func = getattr(module, func_name)
@wraps(func)
def run_before_wrapper(*args, **kwargs):
callback(*args, **kwargs)
return func(*args, **kwargs)
setattr(module, func_name, run_before_wrapper)
return callback
return decorator

def run_after(module, func_name):
def decorator(callback):
func = getattr(module, func_name)
@wraps(func)
def run_before_wrapper(*args, **kwargs):
res = func(*args, **kwargs)
callback(*args, **kwargs)
return res
setattr(module, func_name, run_before_wrapper)
return callback
return decorator

@run_before(A, 'f')
def sstart(*args, **kwargs):
print "start"
@run_after(A, 'f')
def sstop(*args, **kwargs):
print "sstop"

from b import B
bb = B()
print bb.g()

返回

start
103
sstop
1103
1103

最新更新