[英]Python __getattribute__ and wrapper of method
我想在調用特定方法之前調用帶有參數的函數的包裝器方法。 所以我想我必須ovewrite __getattribute__
方法。
這是一個代碼示例:
def wrapper(func):
return func * 2
class A(object):
def test(self, arg):
return arg + 1
def __getattribute__(self, name):
if name in ['test']:
return wrapper(super(A, self).__getattribute__(name))
return super(A, self).__getattribute__(name)
問題是當test
返回值時調用getattribute。 我想要的是能夠使用參數捕獲test
並定義包裝器方法,如下所示:
def wrapper(func, *args, **kwargs):
print "do some stuff"
return func(*args, **kwargs)
使用工廠函數返回包裝器:
def decorate(f):
def wrapper(*args, **kw):
return f(*args, **kw) * 2
return wrapper
這里f
由wrapper()
關閉,因此它可以在調用時訪問該名稱。
然后在__getattribute__
鈎子中返回:
def __getattribute__(self, name):
result = super(A, self).__getattribute__(name)
if name in ('test',):
return decorate(result)
return result
當然,您也可以在test
將decorate
作為裝飾器應用:
class A(object):
@decorate
def test(self, arg):
return arg + 1
如果我理解正確,你可以使用裝飾器。
def wrapper(func):
def _wrapper(*args, **kwargs):
return func(*args, **kwargs) * 2
return _wrapper
class A(object):
@wrapper
def test(self, arg):
return arg + 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.