使用输入值解析对象属性

时间:2016-10-20 22:24:36

标签: python class object getattr

我开始认为这在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__返回,那么该值将尝试第二次解析。

1 个答案:

答案 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