我爲了記錄目的而構建了一個小裝飾器。檢查方法是否是類方法和調用屬性
def func_detail(func):
def func_wrapper(*args,**kwargs):
log(func.__name__+' ARGS: {}'.format(str(args)))
return func(*args,**kwargs)
return func_wrapper
這適用於對象方法和普通方法。我想在多線程中使用它。我有一個包含pid
作爲對象屬性的類。如果它檢測到該方法屬於某個類並且此類包含屬性pid
,是否可以將修飾器更改爲log
pid
?
我已經試過:
def func_detail(func):
def func_wrapper(*args,**kwargs):
log('PID: '+self.pid if self.pid is not None else ' '+func.__name__+' ARGS: {}'.format(str(args)))
return func(*args,**kwargs)
return func_wrapper
但這並不是在所有工作。你可以幫幫我嗎?
摘要:
我希望能夠調用從那裏方法(func
)所屬的class
屬性pid
沒有傳球self
作爲參數傳遞給包裝,因爲在這種情況下它不會工作的方法這些不在類內。
你說這行不通。你的意思是你得到一個屬性錯誤?如果沒有請解釋。 – KobeJohn
@kobejohn例如只是打印 - 打印self.pid NameError:全局名稱'self'未定義這是因爲裝飾器不知道它將用於對象方法。它也可以用於函數之外。 –