我有以下装饰器:
my_decorator.py
import functools
def caller_name():
frm = inspect.stack()[1]
mod = inspect.getmodule(frm[0])
return mod.__name__
class MyClass:
def __init__(self, bs_servers):
self.caller = caller_name() # Get the caller's name
print(self.caller)
def __call__(self):
def decorator(f):
@functools.wraps(f)
def wrap(*arg, **kwargs):
#....
return wrap
return decorator
这是用法:
my_module.py
deco = MyClass(...)
@deco() # Need the self.caller be 'my_module.py'
def test():
return 1
但是,self.caller
的值为my_decorator.py
而不是my_module.py
?