I have problem solving this question, I have the following class:

```
class test:

    @auth
    def method1(self, x):
        return x

    @auth
    def method2(self, x, y):
        return x+y

    def method3(self, z):
        return z

```

I applied the decorator in both methods, follow:

```
class auth:

    def __init__(self, f):
        self.f = f

    def __call__(self, *args, **kwargs):
        self.f(*args, **kwargs)

```

So far no problem, however I need (NEED) to use the following code:

```
def run():
    klass = globals()["test"]()

    method1 = getattr(klass, "method1")
    print(method1.__code__.co_varnames)
    # should print (self, x)

    method2 = getattr(klass, "method2")
    print(method2.__code__.co_varnames)
    # should print (self, x, y)

    method3 = getattr(klass, "method3")
    print(method3.__code__.co_varnames)
    # i get (self, z) < without decorator

```

But I get now:

```
 AttributeError: 'auth' object has no attribute '__code__'

```

What makes sense if we think that the signature of method "method1 and method2" is now "auth".

**So how do I get the arguments with or without decorators.** 
I started reading about the "inspect" but there are many reports about being slow.