我希望您能提供一种Pythonic解决方案,用于将调用对象上的方法直接存储在对象内部。
因为在Python中,如果我想捕获例如abs()
方法,我将像这样重载此运算符:
Catcher(object):
def __abs__(self):
self.function = abs
c = Catcher()
abs(c) # Now c.function stores 'abs' as it was called on c
如果我想捕获一个带有另一个属性的函数,例如pow()
,我将使用以下代码:
def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): # your code here result = func(*args, **kwargs) # your code here return result return wrapper @my_decorator def pow(x, y): return x ** y ```
Catcher(object):
def __pow__(self, value):
self.function = pow
self.value = value
c = Catcher()
c ** 2 # Now c.function stores 'pow', and c.value stores '2'
现在,我需要一般解决方案,以捕获和存储在 Catcher
上调用的任何类型的函数,而无需实现所有重载和其他情况。并且,正如您所看到的,我还想存储方法属性的值(如果有多个值,则可能使用列表?)。
提前感谢!
__getattr__
方法并检查所访问的属性是否为方法吗? - Benjamin Hodgson__getattr__
。__getattribute__
也不行。 - Martijn Pieters