我开始认为这在Python中以 easy 方式可能无法实现。无论是那个还是我似乎无法用这个问题来解释它(或者找到StackOverflow的答案)。
这里有一些精简版代码可以帮助进行解释:
import numpy as np
class MyObject():
def __getattr__(self, item):
return getattr(np.eye(1), item)
这个简单的设置确保每当我调用一个属性时,我都会得到一个numpy数组(其中只有值1)。这允许我调用numpy数组函数,例如最终返回整数值的MyObject.sum()。
还有其他需要输入的函数,例如:MyObject.dot(AnotherNumPyArray)
到目前为止一直很好......但是,当输出值不是严格的整数时,我希望发生一个特殊的函数。即在第二种情况下,我得到一个ndarray作为输出。
我尝试部分解决这个问题:
import numpy as np
class MyObject():
def __getattr__(self, item):
func = getattr(np.eye(1), item)
if type(func()) == np.ndarray:
return func()*2
else:
return func
唯一的问题是,只有在调用函数没有输入参数时,这才有效。我觉得我想在if语句中运行func(value),但是,1)我不知道如何传入值。 2)一旦从__getattr__
返回,那么该值将尝试第二次解析。
答案 0 :(得分:0)
您可以返回一个包装方法,例如:
import numpy as np
class MyObject():
def __getattr__(self, item):
def wrapper(*args, **kwargs):
func = getattr(np.ndarray(1), item)
result = func(*args, **kwargs)
if isinstance(result, np.ndarray):
return result * 2
return result
return wrapper
此处wrapper
将传入的调用委托给np.ndarray(1)
上的方法,并根据需要处理返回的result
。