我有問題,解決這個問題,我有下面的類:工作和getattr的
class test:
@auth
def method1(self, x):
return x
@auth
def method2(self, x, y):
return x+y
def method3(self, z):
return z
我申請的裝飾在這兩種方法,如下:
class auth:
def __init__(self, f):
self.f = f
def __call__(self, *args, **kwargs):
self.f(*args, **kwargs)
到目前爲止沒有問題,不過,我需要(需要)使用下面的代碼:
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
但我現在得到:
AttributeError: 'auth' object has no attribute '__code__'
如果我們認爲方法「method1和method2」的簽名現在是「auth」,那麼有意義。
那麼,如何獲得有或沒有裝飾器的參數。 我開始閱讀有關「檢查」的內容,但有很多關於緩慢的報道。
你可以使用像'method1.f .__ code __。co_varnames'這樣的東西。但是通常你需要使用的代碼需要知道/與裝飾器代碼協作(即它需要知道在哪裏尋找函數參數)。 – BrenBarn