1

I have the following decorator:

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

And here is the usage:

my_module.py

deco = MyClass(...)

@deco() # Need the self.caller be 'my_module.py'
def test():
    return 1

However, the self.caller got the value of my_decorator.py instead of my_module.py?

ca9163d9
  • 27,283
  • 64
  • 210
  • 413

0 Answers0