gpt4 book ai didi

Python __getattribute__ 和方法的包装

转载 作者:行者123 更新时间:2023-11-30 23:20:16 24 4
gpt4 key购买 nike

我想在调用特定方法之前调用带有参数的函数的包装方法。所以我想我必须重写 __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

这里 fwrapper() 封闭,因此它可以在调用时访问名称。

然后在__getattribute__钩子(Hook)中返回它:

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

关于Python __getattribute__ 和方法的包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com