首页 > 解决方案 > 如何将类参数名称赋予函数以更改此参数

问题描述

我有一个从 numpy 数组中删除 nan 值的函数:

    def _remove_nans(self):
        def get_without_nans(array):
            mask = np.invert(np.isnan(array))
            return array[mask]

        self.average_dynamic_depth = get_without_nans(self.average_dynamic_depth)
        # ... many more similar lines to clear more arrays

这可行,但很难阅读,更重要的是它很容易产生复制和粘贴错误,例如:

self.a = get_without_nans(self.b)  # <= b instead of a!

是否可以将参数名称作为参数提供给函数 get_without_nans() 而不是数组?这样我就可以以某种方式将其称为:

get_without_nans("self.average_dynamic_depth")
# or
get_without_nans("average_dynamic_depth")

?

标签: python

解决方案


您可以使用getattrsetattr。代码如下所示:

def _remove_nans(self):
    def get_without_nans(self, attrname):
        array = getattr(self, attrname, None)
        if array is not None:
            mask = np.invert(np.isnan(array))
            setattr(self, attrname, array[mask])
        else:
            raise AttributeError("some error message")

    get_without_nans(self, "average_dynamic_depth")
    # ... many more similar lines to clear more arrays

推荐阅读